Spock 框架如何测试 spring 引导应用程序上下文
Spock Framework how to test spring boot application context
我使用带有 Groovy 脚本的 Spock 框架来测试我的 Java 应用程序。对于我创建的所有 classes,我的项目中的测试覆盖率为 100%。但是,我注意到覆盖范围显示名为 "App" 的主要 class 未经过全面测试。
这是我的应用 class 来启动 Spring 应用程序:
package com.test.cli;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
App app = context.getBean(App.class);
app.start();
}
private void start() {
System.out.print("App started ...");
}
}
这是我对 App class:
的单一测试
package com.test.cli
import com.test.cli.App
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.context.ApplicationContext
import spock.lang.Specification
@SpringBootTest(classes = App.class)
class AppSpecIT extends Specification {
@Autowired
ApplicationContext context
def "it should boot Spring application successfully"() {
expect: "application context exists"
context != null
}
}
你可以在这个截图中看到,第 12 到 18 行没有被覆盖,我想修复它:
如何使用 Spock 框架全面测试 Spring 引导应用程序上下文?
@SpringBootTest
仅实例化使用 @SpringBootApplication
注释的 class 或通过 classes
显式配置的任何其他配置 class。然而,静态 main
方法不会被执行,并且应该只包含胶水代码 SpringApplication.run(App.class, args)
无论如何。如果您想测试它,则必须明确调用它,但我建议您不要这样做,您可以在此处阅读原因 The tragedy of 100% code coverage.
如果您需要在开始后调用诸如 start 方法之类的东西,请改用 org.springframework.boot.ApplicationRunner
或 org.springframework.boot.CommandLineRunner
。
我使用带有 Groovy 脚本的 Spock 框架来测试我的 Java 应用程序。对于我创建的所有 classes,我的项目中的测试覆盖率为 100%。但是,我注意到覆盖范围显示名为 "App" 的主要 class 未经过全面测试。
这是我的应用 class 来启动 Spring 应用程序:
package com.test.cli;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
App app = context.getBean(App.class);
app.start();
}
private void start() {
System.out.print("App started ...");
}
}
这是我对 App class:
的单一测试 package com.test.cli
import com.test.cli.App
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.context.ApplicationContext
import spock.lang.Specification
@SpringBootTest(classes = App.class)
class AppSpecIT extends Specification {
@Autowired
ApplicationContext context
def "it should boot Spring application successfully"() {
expect: "application context exists"
context != null
}
}
你可以在这个截图中看到,第 12 到 18 行没有被覆盖,我想修复它:
如何使用 Spock 框架全面测试 Spring 引导应用程序上下文?
@SpringBootTest
仅实例化使用 @SpringBootApplication
注释的 class 或通过 classes
显式配置的任何其他配置 class。然而,静态 main
方法不会被执行,并且应该只包含胶水代码 SpringApplication.run(App.class, args)
无论如何。如果您想测试它,则必须明确调用它,但我建议您不要这样做,您可以在此处阅读原因 The tragedy of 100% code coverage.
如果您需要在开始后调用诸如 start 方法之类的东西,请改用 org.springframework.boot.ApplicationRunner
或 org.springframework.boot.CommandLineRunner
。