3 回答
TA贡献1847条经验 获得超11个赞
问题是gameClient.runGame()似乎通过无限运行或请求用户输入来阻止您的测试。如果您有任何测试正在运行您的 Spring Boot 应用程序,您的测试(和您的构建)也会被阻塞。
即使您可以传递-Dmaven.test.skip=true参数以跳过测试(如本答案中所述),但这仍然意味着该特定测试已损坏。如果您不需要它,请删除它,或者gameClient.runGame()通过执行以下操作确保在测试期间不会调用它:
将您的逻辑移至实现CommandLineRunner(or ApplicationRunner) 接口的单独类:
@Component
public class GameRunner implements CommandLineRunner {
@Autowired
GameClient gameClient;
@Override
public void run(String...args) throws Exception {
gameClient.runGame();
}
}
之后,用注解对组件进行@Profile注解,例如:
@Component
@Profile("!test") // Add this
public class GameRunner implements CommandLineRunner {
@Autowired
GameClient gameClient;
@Override
public void run(String...args) throws Exception {
gameClient.runGame();
}
}
通过使用@Profile注释,您可以告诉 Spring 仅在某些配置文件处于活动状态时加载组件。通过使用感叹号!,我们告诉 Spring 仅在测试配置文件未激活时才加载组件。
现在,在您的测试中,您可以添加@ActiveProfiles("test")注释。这将在运行测试时启用测试配置文件,这意味着GameRunner不会创建 bean。
TA贡献1155条经验 获得超0个赞
我通过在生成 JAR 时跳过测试来解决它:
mvn package -Dmaven.test.skip=true
mvn package
正在调用我的测试,它在内部初始化所有 bean,并且作为初始化的一部分,Spring 调用@PostConstruct
方法。
添加回答
举报