我有一个使用Jersey作为REST引擎的spring-boot应用程序。 我正在使用Jersey过滤器来验证每个请求。 问题是在REST控制器的单元测试期间(使用JUnit)禁用这些过滤器或提供模拟过滤器的适当方法是什么?
这就是我所拥有的:
Spring启动应用程序:
@PropertySource("classpath:security-api.properties")
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
泽西岛配置文件:
@Configuration
@ApplicationPath("/some/path")
public class MyJerseyConfiguration extends ResourceConfig {
public AnalyzerJerseyConfiguration() {
packages(BaseController.class.getPackage().getName());
register(AuthorizationRequestFilter.class);
register(AuthorizationResponseFilter.class);
}
}
答案 0 :(得分:3)
可能你最好的选择是使用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);
}
}
并在测试配置中注册。