Я переношу проект из Spring Boot 1.5 -> 2.2 и у меня возникла проблема с переопределениями bean-компонентов для интеграционного теста для класса-оболочки, который настраивает ModelMapper
для преобразования классов сущностей в dtos для доставки во внешний интерфейс.
В моем файле application-test.properties
я разрешаю переопределение bean-компонента:
spring.main.allow-bean-definition-overriding=true
У меня есть тестовый класс конфигурации, который переопределяет производственный экземпляр EntityManager
(или это было весной Загрузка 1.5 ...):
@TestConfiguration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.example.package")
@EnableJpaAuditing(auditorAwareRef = "mockAuditorAware")
@EnableWebSecurity
public class BackendTestConfiguration {
@Bean(name = "testEmf")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DriverManagerDataSource dataSource) {
LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
entityManager.setDataSource(dataSource);
entityManager.setPackagesToScan("com.example");
entityManager.setJpaVendorAdapter( new HibernateJpaVendorAdapter() );
return entityManager;
}
}testE
И класс теста:
@ExtendWith(SpringExtension.class)
@TestPropertySource("classpath:/application-test.properties")
@SpringBootTest(classes = {WrapperTestConfiguration.class})
@ComponentScan(basePackages = "com.example.package")
class MyModelMapperTest {
private MyModelMapper modelMapper;
@Autowired
LotteryModelMapperTest(MyModelMapper mm) {
this.modelMapper = mm;
}
// test cases
}
Если я запускаю тестовые примеры с переопределенным компонентом, присутствующим в конфигурации теста, тест завершается неудачно
NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManager' available: expected single matching bean but found 2: org.springframework.orm.jpa.SharedEntityManagerCreator#0,org.springframework.orm.jpa.SharedEntityManagerCreator#1
Однако удаление любого из настроенных EntityManagerFactory
bean-компонентов (тестовых или производственных) приводит к
NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available: expected at least 1 bean which qualifies as autowire candidate.
Так что я, кажется, получаю два экземпляра или ноль экземпляров. Как настроить это так, чтобы я переопределял bean-компонент в рабочей конфигурации с тем, что в тестовой конфигурации?