java - 如何在主程序中使用两个(或更多)返回 String 的 bean,并在测试时用另外两个替换它们?
问题描述
我有配置文件:
@Configuration
public class UrlAnalyzerConfiguration {
@Bean
@Qualifier("usersDatabase")
public File getUsersDatabaseFile() {
return Paths.get("src/main/resources/database/users.csv").toFile();
}
@Bean
@Qualifier("urlsDatabase")
public File getUrlsDatabaseFile() {
return Paths.get("src/main/resources/database/urls.csv").toFile();
}
}
和测试配置:
@TestConfiguration
public class TestConfig {
@Bean
@Qualifier("usersDatabase")
public File getUsersDatabaseTestFile() {
return Paths.get("src/test/resources/database/users.csv").toFile();
}
@Bean
@Qualifier("urlsDatabase")
public File getUrlsDatabaseTestFile() {
return Paths.get("src/test/resources/database/urls.csv").toFile();
}
}
我的存储库使用其中一个 bean:
private final File usersDatabase;
@Autowired
public UserRepositoryImpl(@Qualifier("usersDatabase") File usersDatabase) {
this.usersDatabase = usersDatabase;
}
我的存储库测试文件:
@SpringBootTest
@Import(TestConfig.class)
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
// tests here
}
结果,我的主程序正常工作,但测试失败,最后显示以下消息:
通过构造函数参数 0 表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有“java.io.File”类型的合格 bean 可用:预期单个匹配 bean,但找到 2:getUsersDatabaseTestFile,getUsersDatabaseFile
我发现了问题:
除了应用程序的主要配置之外,还使用 @TestConfiguration 类。这意味着,测试一起使用@Configuration 和@TestConfiguration!但无论如何,我怎样才能正确使用我的豆子呢?
解决方案
您可以使用@Profile
和的组合@ActiveProfiles
仅加载测试所需的类。请参阅下面的原型。
配置
@Configuration
@Profile("test")
public class TestOnlyConfigs {
// define beans
}
测试
@ActiveProfiles("test")
public class Tests {
// write tests
}
参考
推荐阅读
- xgboost - XGboost + GridSearch:有线警告
- aws-lambda - 使用请求验证模型的无服务器 Lambda 代理集成 - 如何获取详细的验证错误响应
- python - 用实验数据训练模型
- c# - ASP 网络。- 执行 Ajax 调用时产生响应代码 500
- nvd3.js - 使用 NVd3 创建半圆形仪表
- if-statement - 在 Google 表格中记录单元格文本更改的日期
- javascript - 如何在 React JS 中配置 Ckeditor 工具栏?
- excel - 组合框上的宏和枢轴过滤需要很长时间才能完成
- d3.js - D3 按条件填充线性图的区域
- python - 如果单行条件为真,则引发异常?