使用Spring 4,我得到了以下测试设置:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JpaConfig.class)
@ActiveProfiles(resolver = TestResolver.class)
public class SimpleTest {
TestResolver已实现为:
public class TestResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> aClass) {
String[] profiles = new String[1];
profiles[0] = "test";
return profiles;
}
}
JpaConfig已使用PropertySource注释
@Configuration
@PropertySource("classpath:properties/application-${spring.profiles.active:dev}.properties")
@EnableJpaRepositories(basePackages={"com.my.namespace.repositories"})
public class JpaConfig {
每当我运行SimpleTest时,它会尝试找到:properties / application-dev.properties,而我期望它是properties / application-test.properties。
我在此尝试完成的内容基于以下帖子:Spring integration tests with profile
答案 0 :(得分:11)
我相信this实际上是您面临的问题。在那个same post中,你有Dave Syer的解释和另一个用户的可能解决方案。要遵循Dave的建议,这将是ApplicationContextInitializer
:
public class MyApplicationContextInitializer implements
ApplicationContextInitializer<GenericApplicationContext> {
public void initialize(GenericApplicationContext context) {
context.getEnvironment().getSystemProperties().put(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, "some_profile");
}
}
并在您的测试班上:
@ContextConfiguration(classes = JpaConfig.class, initializers = MyApplicationContextInitializer.class)
但我会说在SO帖子中建议的方法(为不同的配置文件加载不同的.properties文件)是一种更优雅的方法。
答案 1 :(得分:1)
我认为您应该将@PropertySource更改为:
@PropertySource("classpath:properties/application-${spring.profiles.active}.properties")
同样为了简单起见(不应对代码运行方式产生任何影响),@ ActiveProfile可能
@ActiveProfiles("test")