【发布时间】:2018-11-06 19:03:36
【问题描述】:
在我的多模块项目中,我将集成测试作为单独的模块。该测试已将应用程序 jar 添加为依赖项。是否可以从集成测试中覆盖应用程序 bean 定义?
在应用程序中,我有以下 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 {
}
最后在我的 MailTestConfiguration 中我定义了另一个 JavaMailSender
@Primary
@Bean
@Profile(TestProfiles.MAIL_GREEN_SMTP)
public JavaMailSender javaMailService() {
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost("localhost");
javaMailSender.setPort(3025);
return javaMailSender;
}
当我从应用程序本身运行测试时它正在工作。当我从另一个模块运行测试时,bean 不会被覆盖。
我知道在应用程序中定义的 AppConfiguration 类不能对集成测试配置类进行组件扫描,所以我也加载了 AppTestConfiguration。
@Configuration
@ComponentScan(basePackages = {"..."})
public class AppTestConfiguration extends AppConfiguration {
}
如何让它发挥作用?
【问题讨论】:
-
您是否在子测试类中加载了正确的配置文件?此外,我会将 runwith 和 webappconfiguration 移至子测试类以避免任何令人讨厌的继承问题。
标签: java spring spring-mvc spring-mvc-test