В моем многомодульном проекте у меня есть интеграционные тесты как отдельный модуль. В этих тестах в качестве зависимости добавлен jar приложения. Можно ли переопределить определение бина приложения из интеграционных тестов?
В приложении у меня есть следующий Bean (стандартная конфигурация отправителя java почты)
@Configuration
public class MailConfiguration {
@Bean
public JavaMailSender javaMailService() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
//standard mail configuration using properties
}
}
Теперь все мои интеграционные тесты расширяют BaseIntegrationTest, который загружает класс конфигурации теста
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = { AppTestConfiguration.class, MailTestConfiguration.class})
public class BaseIntegrationTest {
}
И, наконец, в моей конфигурации MailTest я определяю другой JavaMailSender
@Primary
@Bean
@Profile(TestProfiles.MAIL_GREEN_SMTP)
public JavaMailSender javaMailService() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("localhost");
javaMailSender.setPort(3025);
return javaMailSender;
}
Это работает, когда я запускаю тесты из самого приложения. Когда я запускаю тесты из другого модуля, компонент не переопределяется.
Мне известно, что класс AppConfiguration, определенный внутри приложения, не может сканировать компоненты конфигурации классов интеграционных тестов, поэтому я также загружаю AppTestConfiguration.
@Configuration
@ComponentScan(basePackages = {"..."})
public class AppTestConfiguration extends AppConfiguration {
}
Как заставить это работать?