你最好的选择可能是使用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子类,那么创建不同的Spring配置可能更有意义。您只需为不同的配置创建@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);
}
}
并在测试配置中注册此项。