自定义过滤器未在Spring集成测试中注入

时间:2015-10-28 17:29:11

标签: spring filter integration-testing

我有一个集成测试,旨在启动我的Spring Boot应用程序:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = AppConfigCorrelationIdTestIt.class)
@WebIntegrationTest("server.port:0")
public class CorrelationIdTestIT {

配置类是:

@EnableConfigurationProperties
@ComponentScan
@EnableAutoConfiguration
@Configuration
public class AppConfigCorrelationIdTestIt {

在app中我有一个定义的自定义servlet过滤器:

public class CorrelationHeaderFilter implements Filter {

但是在测试我的应用程序时,我发现客户过滤器没有实例化并注入到过滤器链中。我找到的唯一方法是在AppConfigCorrelationIdTestIt中手动创建它作为一个bean,然后它完美地工作。

@Bean
public CorrelationHeaderFilter correlationHeaderFilter() {
    return new CorrelationHeaderFilter();
}

当应用程序启动时,Spring Boot没有选择过滤器的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

通常,在测试类中,可以在配置MockMvc时使用DefaultMockMvcBuilder。 addFilter (Filter filter,String ... urlPatterns)。例如:

@WebAppConfiguration
@ContextConfiguration
public class AuthenticationTest {

private static final String TOKEN_HEADER = "X-Firebase-Auth";

final String url = "http://localhost:8080/authentication";

final Logger logger = LoggerFactory.getLogger(AuthenticationTest.class);

@Autowired
private WebApplicationContext webApplicationContext;

@Autowired
public Filter springSecurityFilterChain;

private MockMvc mockMvc;

@Before
public void setUp(){
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
            .addFilter(springSecurityFilterChain).build();
}
...

}

我基于this answer