我使用Spock Framework和Groovy脚本来测试我的Java应用程序。对于我创建的所有类,我的项目都有100%的测试覆盖率。但是,我注意到覆盖范围显示主要类叫做#34; App"尚未经过全面测试。
这是我的App类来启动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类的单一测试:
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 Framework完全测试Spring Boot应用程序上下文?
答案 0 :(得分:2)
@SpringBootTest
仅实例化使用@SpringBootApplication
注释的类或通过classes
显式配置的任何其他配置类。但是,静态main
方法不会被执行,并且应该只包含粘合代码SpringApplication.run(App.class, args)
。如果您想要测试它,那么您必须明确地调用它,但我建议您反对它,您可以在此处阅读为什么The tragedy of 100% code coverage。
如果您需要在开始之后调用start方法,请改用org.springframework.boot.ApplicationRunner
或org.springframework.boot.CommandLineRunner
。