java - 注释@ConditionalOnMissingBean 在测试中不匹配
问题描述
我有一个接口的两个实现 - 默认和开发。我@ConditionalOnProperty
用于默认实现和组合@Profile
以及@ConditionalOnMissingBean
开发实现。
@Service
@ConditionalOnProperty(prefix = "keystore", value = "file")
public class DefaultKeyStoreService implements KeyStoreService {
@Service
@Profile("dev")
@ConditionalOnMissingBean(KeyStoreService.class)
public class DevKeyStoreService implements KeyStoreService {
现在,问题正在测试DevKeyStoreServiceTest
中DevKeyStoreService
。我有这样的配置:
@SpringBootTest(
classes = {DevKeyStoreService.class},
properties = {"keystore.file="}
)
@RunWith(SpringRunner.class)
@ActiveProfiles("dev")
public class DevKeyStoreServiceTest {
@Autowired
private DevKeyStoreService tested;
@Test
public void testPrivateKey() {
} //... etc.
结果是:
Negative matches:
-----------------
DevKeyStoreService:
Did not match:
- @ConditionalOnMissingBean (types: service.crypto.KeyStoreService; SearchStrategy: all) found bean 'devKeyStoreService' (OnBeanCondition)
和典型的org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'service.crypto.DevKeyStoreServiceTest'...
。
如何配置测试类以使其能够运行?
解决方案
好的,我想通了。
带有值的注释@ConditionalOnMissingBean(KeyStoreService.class)
试图只找到具体的实例,而KeyStoreService
不是接口。这样,它什么也找不到。
当我使用带类型的注释时,它就像一个魅力:@ConditionalOnMissingBean(type = "KeyStoreService")
。
推荐阅读
- python - 设置子图高度/宽度
- python - 使用python查找时间序列数据(线或一维数据)的趋势
- asp.net-mvc - 模型视图保留旧数据
- flutter - Flutter 将设备令牌保存到 SharedPreferences
- android - 如何从 kotlin MutableMap 访问值
? - python - 执行后如何从内存中清除jupyter笔记本单元代码
- html - 为什么我网站上的视频没有出现在 Google 视频搜索结果中?
- c# - FluentValidation - 将参数从一个规则传递到另一个规则
- python - 网站拒绝使用 Selenium 获取请求
- php - 用于 img 标签的 Laravel 自定义路径