我有一个集成测试,旨在启动我的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没有选择过滤器的任何想法?
由于
答案 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