【发布时间】: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方法中。
标签: java spring-boot junit4