В Spring Boot 2.1 переопределение bean-компонентов отключено по умолчанию, и это хорошо.
Однако у меня есть несколько тестов, где я заменяю bean-компоненты на mockito. При настройке по умолчанию тесты с такой конфигурацией не будут выполнены из-за переопределения бина.
Единственный способ, который я нашел работающим, состоял в том, чтобы включить переопределение bean-компонентов через свойства приложения:
spring.main.allow-bean-definition-overriding=true
Однако я действительно хотел бы обеспечить минимальную настройку определения bean-компонента для моей тестовой конфигурации, которая будет указана spring с отключенной переопределением.
Бобы, которые я переопределяю, либо
- Определено в другой конфигурации, которая импортирована в мою тестовую конфигурацию
- Автоматически обнаруженный бин путем сканирования аннотаций
То, о чем я думал, должно работать в тестовой конфигурации, переопределяя bean-компонент и @Primary
к нему, как мы привыкли для конфигураций источника данных. Это, однако, не имеет никакого эффекта и @Primary
меня задуматься: противоречиво ли переопределение бина @Primary
и отключенного бина?
Пример:
package com.stackoverflow.foo;
@Service
public class AService {
}
package com.stackoverflow.foo;
public class BService {
}
package com.stackoverflow.foo;
@Configuration
public BaseConfiguration {
@Bean
@Lazy
public BService bService() {
return new BService();
}
}
package com.stackoverflow.bar;
@Configuration
@Import({BaseConfiguration.class})
public class TestConfiguration {
@Bean
public BService bService() {
return Mockito.mock(BService.class);
}
}