【发布时间】:2023-04-10 19:30:01
【问题描述】:
在我的 springboot 应用程序中,我正在使用以下类执行集成测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AccountLoadApplication.class,
loader = SpringApplicationContextLoader.class)
@WebIntegrationTest(randomPort = true)
public class LoaderTest {
AccountLoadApplication.class 是一个 Spring Boot 主类,实际应用程序有一个如下定义的 bean:
@Bean
public ResourceLoader recapMvsFileResourceLoader() {
return new RemoteFileResourceLoader(remoteHostProperties(), new SFTPRemoteFileService());
}
我还有一个如下所示的测试配置类
@Configuration
public class AtddTestConfig {
@Bean
public ResourceLoader mvsFileResourceLoader() {
ResourceLoader recapMvsFileResourceLoader =
new RemoteFileResourceLoader(remoteHostProperties(), new FakeSFTPRemoteFileService());
return recapMvsFileResourceLoader;
}
我的想法是我想使用测试配置文件中定义的新 bean 覆盖在主应用程序中创建的 bean。
但是在集成测试期间,主应用程序 bean 被考虑而不是测试应用程序上下文中定义的 bean?
还有其他方法可以实现我想要实现的目标吗?
其他信息:
这是我的应用程序配置类中定义的 bean
@Bean
public RemoteFileService remoteFileService() {
return new SFTPRemoteFileService();
}
@Bean
public ResourceLoader recapMvsFileResourceLoader() {
return new RemoteFileResourceLoader(remoteHostProperties(), remoteFileService());
}
这是我的测试配置类中定义的 bean
@Bean
@Profile("local")
@Primary
public RemoteFileService remoteFileService() {
return new FakeSFTPRemoteFileService();
}
仍然只创建生产 bean 而不是这个主 bean。
【问题讨论】: