gpt4 book ai didi

java - 在与 JUnit SpringRunner 的集成测试期间未加载 SpringApplicationBuilder

转载 作者:行者123 更新时间:2023-11-30 02:14:01 25 4
gpt4 key购买 nike

这是我在 stackoverflow.com 上提出的第一个问题。

最近我一直在寻找一种方法来更改 Spring Boot (2.x) 命名其通过 @Component (etc) 注释创建的 bean 的方式。

我找到了SpringApplicationBuilder类,值得庆幸的是,它允许注入(inject)自定义 bean 名称生成器:

public class Application {

public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.beanNameGenerator(customBeanNameGenerator)
.run(args);
}

}

但问题是,尽管该解决方案适用于生产,但在 JUnit 4.0 单元测试中却不起作用,其中 JUnit Runner SpringRunner出于测试目的重新创建 Spring Context - 在这种情况下,不会使用 SpringApplicationBuilder,因此我们的应用程序启动会失败,因为 Autowiring 多 bean 候选者问题。

@RunWith(SpringRunner.class)
@SpringBootTest(classes= {Application.class} )
public class SomeControllerTest {
...
}

是否有任何优雅的方法可以使单元测试也使用 SpringApplicationBuilder?

问候。

最佳答案

@SpringBootApplication 的属性“classes”仅使用类的注释。因此,构建 SpringApplication 的代码在运行测试时不起作用。

如果你想解决这个问题,可以尝试其他方法,比如在@ComponentScan中指定nameGenerator

@ComponentScan(nameGenerator = CustomBeanNameGenerator.class)
public class Application {

public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.run(args);
}

}

确保您的 CustomBeanNameGenerator 类有一个空的构造函数。

ps:英语不是我的母语;请原谅输入错误。

关于java - 在与 JUnit SpringRunner 的集成测试期间未加载 SpringApplicationBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49187071/

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