gpt4 book ai didi

java - Spock框架如何测试spring boot应用程序上下文

转载 作者:行者123 更新时间:2023-12-02 02:40:01 27 4
gpt4 key购买 nike

我使用 Spock Framework 和 Groovy 脚本来测试我的 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 行没有被覆盖,我想修复这个问题:App Test coverage result

如何使用 Spock 框架全面测试 Spring Boot 应用程序上下文?

最佳答案

@SpringBootTest 仅实例化使用 @SpringBootApplication 注解的类或通过 classes 显式配置的任何其他配置类。然而,静态 main 方法不会被执行,并且应该只包含粘合代码 SpringApplication.run(App.class, args) 。如果你想测试它,那么你必须明确地调用它,但我建议不要这样做,你可以在这里阅读为什么 The tragedy of 100% code coverage .

如果您需要在启动后调用类似 start 方法的内容,请使用 org.springframework.boot.ApplicationRunnerorg.springframework.boot.CommandLineRunner 代替。

关于java - Spock框架如何测试spring boot应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com