junit - 如何仅对单元测试禁用 Jersey 过滤器(使用spring-boot)

标签 junit filter spring-boot jersey

我有一个将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/

相关文章:

java - 后台缓存逐出进程无法释放 [10]% 的缓存用于上下文

java - JUnit 报告显示测试功能,而不是覆盖率

java - jUnit单元测试空指针异常而不是自定义异常

java - 如何在嵌套的 Junit 5 测试中访问外部测试实例/参数

android - getStartedActivityIntent 在使用 ActivityUnitTestCase 的单元测试用例中返回 null

api - 使用 Management API 按网站名称过滤 AdSense 报告

java - 将过滤选项添加到 JTable 的列标题

date - 筛选 SharePoint 列表上的年初至今条目

java - spring 的 Ehcache 在微服务之间不能正常工作

spring-boot - 嵌套异常是 javax.management.InstanceAlreadyExistsException : com. zaxxer.hikari :name=dataSource, type=HikariDataSource