#java #spring-boot #junit4
#Ява #пружинный ботинок #июнь4
Вопрос:
@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]
Комментарии:
1. это не ошибка, это какая-то отсутствующая конфигурация. Ваш макет не знает, над каким бобом этого типа вы хотите поиздеваться. Прошло некоторое время с тех пор, как я использовал этот тип насмешек, но, по-моему, использование квалификатора могло бы здесь помочь
2. Ошибка правильно описывает проблему. Ваш тестовый класс не может найти уникальный компонент в соответствии с вашей конфигурацией, потому что оба
initCodeGenerateDbConfig
иCodeGenerateDbConfig
являются одними и теми же компонентами. Я думаю, что использование@Qualifier
решит проблему.3. Ваш
@Configuration
-это aCodeGenerateDbConfig
, тогда вы злоупотребляете/злоупотребляете@Bean
методом, чтобы выполнить некоторую инициализацию, которая также возвращает aCodeGenerateDbConfig
. Откажитесь от этого@Bean
метода и поместите код в@PostConstruct
метод.
Ответ №1:
MockBean , похоже, не поддерживается, поэтому его необходимо указать вручную
Ручное указание типа для ввода начинается нормально.
@MockBean(classes = {CodeGenerateDbConfig .class})
Хотите ли вы вручную указать тип для инъекции?