不使用Spring Boot ,如何使我的集成测试能够基于活动的Profile在不同的环境下运行?
我已经通过为每个概要文件使用一个应用程序配置类来实现此目的,但这意味着我必须在每个不同的应用程序配置类之间复制所有Bean定义。这似乎容易出错且麻烦。例如,在我所有的集成测试类上,我都有以下注释:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=
{EnvironmentConfiguration1.class,EnvironmentConfiguration2.class})
public class IntegrationTestClassIT {
@Test
public void testMethod() {...}
}
然后,我的每个EnvironmentConfigurationX.class都引用不同的PropertySource,例如:
@Profile("environment1")
@Configuration
@ComponentScan
@PropertySource("classpath:environment1.properties")
public class EnvironmentConfiguration1 {
@Bean
public static PropertySourcesPlaceholderConfigurer
propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
这似乎可行,但是拥有所有这些Configuration类感觉很丑。 Spring对此没有更好的解决方案吗?
此外,即使我期望能够在我的测试EnvironmentConfigurationxxx类上使用@TestPropertySource,也无法正常工作。我以为PropertySource和TestPropertySource是可互换的,只是TestPropertySource具有更高的优先级。 TestPropertySource不是Configuration类的有效注释吗?