我有一个将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); 
    } 
} 


并将其注册到测试配置中。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!