что-то не так с ошибкой SpringBootTest MockBean

#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 -это a CodeGenerateDbConfig , тогда вы злоупотребляете/злоупотребляете @Bean методом, чтобы выполнить некоторую инициализацию, которая также возвращает a CodeGenerateDbConfig . Откажитесь от этого @Bean метода и поместите код в @PostConstruct метод.

Ответ №1:

MockBean , похоже, не поддерживается, поэтому его необходимо указать вручную

Ручное указание типа для ввода начинается нормально.

 @MockBean(classes = {CodeGenerateDbConfig .class})  

Хотите ли вы вручную указать тип для инъекции?