您最好的选择可能是使用Spring Profiles。您可以在帖子中将ResourceConfig 标记为“生产”配置,而对于测试,使用“测试”配置文件创建一个新的ResourceConfig。然后在您的测试中将活动配置文件设置为"test",在生产中,将活动配置文件设置为"production"
@Profile("production")
@Configuration
@ApplicationPath("/some/path")
public class MyJerseyConfiguration extends ResourceConfig {
public AnalyzerJerseyConfiguration() {
packages(BaseController.class.getPackage().getName());
register(AuthorizationRequestFilter.class);
register(AuthorizationResponseFilter.class);
}
}
@Profile("test")
@Configuration
@ApplicationPath("/some/path")
public class TestConfiguration extends ResourceConfig {
public AnalyzerJerseyConfiguration() {
packages(BaseController.class.getPackage().getName());
register(TestRequestFilter.class);
register(TestResponseFilter.class);
}
}
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
public class TestClass {}
您还可以在属性配置文件中设置活动配置文件(如上面的链接所述)。
如果您想为不同的测试使用不同的配置,而不是创建一堆ResourceConfig 子类,创建不同的弹簧配置可能更有意义。您可以为不同的配置创建 @Bean 方法。
@Profile("test")
@Configuration
public class TestOneConfig {
@Bean
public ResourceConfig resourceConfig() {
return new ResourceConfig()
.register(Something.class);
}
}
@Profile("test")
@Configuration
public class TestTwoConfig {
@Bean
public ResourceConfig resourceConfig() {
return new ResourceConfig()
.register(DifferentSomething.class);
}
}
无论您想使用哪一个,只需将其添加到测试配置中即可。
@ActiveProfiles("test")
@SpringApplicationConfiguration(classs={MainApp.class, TestOneConfig.class})
public class TheTest {}
使用Spring Boot 1.4(尚未发布),他们引入了ResourceConfigCustomizer。这可能会使它更干净一点,无需创建“测试”ResourceConfig,您也许可以执行类似的操作
@Component
public class TestCustomizer implements ResourceConfigCustomizer {
@Override
public void customize(ResourceConfig config) {
config.getClasses().remove(AuthorizationRequestFilter.class);
config.register(TestRequestFilter.class);
}
}
并将其注册到测试配置中。