Jon*_*gat 4 java spring spring-test
使用Spring 4,我有以下测试设置:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = JpaConfig.class)
@ActiveProfiles(resolver = TestResolver.class)
public class SimpleTest {
Run Code Online (Sandbox Code Playgroud)
TestResolver已实现为:
public class TestResolver implements ActiveProfilesResolver {
@Override
public String[] resolve(Class<?> aClass) {
String[] profiles = new String[1];
profiles[0] = "test";
return profiles;
}
}
Run Code Online (Sandbox Code Playgroud)
JpaConfig已经使用PropertySource注释
@Configuration
@PropertySource("classpath:properties/application-${spring.profiles.active:dev}.properties")
@EnableJpaRepositories(basePackages={"com.my.namespace.repositories"})
public class JpaConfig {
Run Code Online (Sandbox Code Playgroud)
每当我运行SimpleTest时,它会尝试找到:properties/application-dev.properties,而我期望它是properties/application-test.properties.
我在这里要完成的是基于以下帖子:使用profile进行Spring集成测试
And*_*fan 11
我相信这实际上是你所面临的问题.在同一篇文章中,您有来自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");
}
Run Code Online (Sandbox Code Playgroud)
}
并在您的测试类:
@ContextConfiguration(classes = JpaConfig.class, initializers = MyApplicationContextInitializer.class)
Run Code Online (Sandbox Code Playgroud)
但我会说在SO帖子中建议的方法(为不同的配置文件加载了不同的.properties文件)是一种更优雅的方法.