Java Spock框架如何测试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

我使用Spock框架和Groovy脚本来测试我的Java应用程序。对于我创建的所有类,我在我的项目中都有100%的测试覆盖率。但是,我注意到,覆盖范围显示名为“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 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

您能告诉我如何解决此问题吗。。??面对同样的问题。我是斯波克和斯普林的新手,所以无法理解莱纳德的答案