Java Spock框架如何测试spring启动应用程序上下文
我使用Spock框架和Groovy脚本来测试我的Java应用程序。对于我创建的所有类,我在我的项目中都有100%的测试覆盖率。但是,我注意到,覆盖范围显示名为“App”的主类没有经过完全测试 以下是启动Spring应用程序的我的应用程序类:Java Spock框架如何测试spring启动应用程序上下文,java,spring-boot,junit,spock,applicationcontext,Java,Spring Boot,Junit,Spock,Applicationcontext,我使用Spock框架和Groovy脚本来测试我的Java应用程序。对于我创建的所有类,我在我的项目中都有100%的测试覆盖率。但是,我注意到,覆盖范围显示名为“App”的主类没有经过完全测试 以下是启动Spring应用程序的我的应用程序类: package com.test.cli; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.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 Boot应用程序上下文?
@SpringBootTest
仅实例化用@SpringBootApplication
注释的类或通过类显式配置的任何其他配置类。但是,静态main
方法不会执行,应该只包含粘合代码SpringApplication.run(App.class,args)
。如果您想测试它,那么您必须显式地调用它,但我建议您不要这样做,您可以在这里了解原因
如果您需要在启动后调用类似start的方法,请使用org.springframework.boot.ApplicationRunner
或org.springframework.boot.CommandLineRunner
。您能告诉我如何解决此问题吗。。??面对同样的问题。我是斯波克和斯普林的新手,所以无法理解莱纳德的答案