SpringbootTest MockBean 错误有啥问题
Posted
技术标签:
【中文标题】SpringbootTest MockBean 错误有啥问题【英文标题】:something wrong with SpringbootTest MockBean errorSpringbootTest MockBean 错误有什么问题 【发布时间】:2022-01-04 06:49:43 【问题描述】:@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = JeecgSystemApplication.class)
public class SampleTest
@MockBean
private CodeGenerateDbConfig initCodeGenerateDbConfig;
@Configuration
public class CodeGenerateDbConfig
@Bean
public CodeGenerateDbConfig initCodeGenerateDbConfig()
if(StringUtils.isNotBlank(url))
CodegenDatasourceConfig.initDbConfig(driverClassName,url, username, password);
return null;
错误是:
Caused by: java.lang.IllegalStateException: Unable to register mock bean org.jeecg.config.init.CodeGenerateDbConfig expected a single matching bean to replace but found [codeGenerateDbConfig, initCodeGenerateDbConfig]
【问题讨论】:
这不是错误,是缺少一些配置。您的模拟不知道您要模拟哪种类型的 bean。自从我使用这种类型的嘲笑以来已经有一段时间了,但我猜使用 Qualifier 将能够在这里提供帮助 错误正确地描述了问题。根据您的配置,您的测试类无法找到唯一的 bean,因为initCodeGenerateDbConfig
和 CodeGenerateDbConfig
都是相同的 bean。我认为使用@Qualifier
可以解决问题。
你的@Configuration
是一个CodeGenerateDbConfig
然后你滥用/滥用@Bean
方法来做一些初始化,它也返回一个CodeGenerateDbConfig
。放弃 @Bean
方法并将代码放入 @PostConstruct
方法中。
【参考方案1】:
MockBean好像不支持,所以必须手动指定
手动指定类型注入正常启动。
@MockBean(classes = CodeGenerateDbConfig .class)
您要手动指定要注入的类型吗?
【讨论】:
以上是关于SpringbootTest MockBean 错误有啥问题的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot @WebMvcTest 和 @MockBean 没有按预期工作
使用Spring Boot的@MockBean时创建严格的模拟?
[@ MockBean和@Autowired在一个测试类中使用同一服务