我有一个将Jersey作为REST引擎的spring-boot应用程序。
我正在使用Jersey过滤器来验证每个请求。
问题是在REST控制器(使用JUnit)进行单元测试期间,禁用这些过滤器或提供模拟过滤器的适当方法是什么?
这是我所拥有的:
春季启动应用程序:
@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);
}
}
最佳答案
最好的选择是使用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);
}
}
并将其注册到测试配置中。
关于junit - 如何仅对单元测试禁用 Jersey 过滤器(使用spring-boot),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37538714/