spring - 在 Spring 集成测试中未注入(inject)自定义过滤器

标签 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 {

在应用程序中,我有一个定义的自定义 servlet 过滤器:
public class CorrelationHeaderFilter implements Filter {

但是在测试我的应用程序时,我发现客户过滤器没有被实例化并注入(inject)到过滤器链中。我发现的唯一方法是在 AppConfigCorrelationIdTestIt 中手动将其创建为 bean。 ,然后完美运行。
@Bean
public CorrelationHeaderFilter correlationHeaderFilter() {
    return new CorrelationHeaderFilter();
}

任何想法为什么在应用程序启动时 Spring Boot 没有选择过滤器?

谢谢

最佳答案

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

@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

关于spring - 在 Spring 集成测试中未注入(inject)自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33397677/

相关文章:

audio - 用于音频信号处理的滤波器?

tomcat - 我如何使用 grok 过滤器在 tomcat 日志中获取匹配的消息?

tdd - 数据库集成测试

testing - 为什么在测试运行后清理数据库?

jax-rs - 是否有一种无需部署即可集成测试 JAX-RS 服务的机制(例如 MockMVC)?

Spring & Tiles - 摆脱 tiles.xml

java - 来自不同 tomcat webapps 的冲突 spring bean

java - Eclipse JSP 预览

java - 上下文初始化失败

ios - GPUImage CannyEdgeDetectionFilter 有白边?