【问题标题】:Spock Framework how to test spring boot application contextSpock Framework如何测试Spring Boot应用程序上下文
【发布时间】:2018-01-20 21:26:35
【问题描述】:

我使用带有 Groovy 脚本的 Spock 框架来测试我的 Java 应用程序。对于我创建的所有类,我的项目中有 100% 的测试覆盖率。但是,我注意到覆盖范围显示名为“App”的主类没有经过全面测试。

这是我启动 Spring 应用程序的 App 类:

 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 应用程序上下文?

【问题讨论】:

  • 你能告诉你如何解决这个问题..??面临同样的问题。我是 Spock 和 Spring 的新手,所以无法理解 Leonard 的回答

标签: java spring-boot junit spock applicationcontext


【解决方案1】:

@SpringBootTest 仅实例化使用@SpringBootApplication 注释的类或通过classes 显式配置的任何其他配置类。但是静态main 方法不会被执行,并且应该只包含胶水代码SpringApplication.run(App.class, args)。如果您想对其进行测试,则必须明确调用它,但我建议您不要这样做,您可以在此处阅读原因 The tragedy of 100% code coverage

如果您需要在 start 之后调用 start 方法,请改用 org.springframework.boot.ApplicationRunnerorg.springframework.boot.CommandLineRunner

【讨论】:

    猜你喜欢
    • 2018-08-27
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多