nic*_*esh 5 spring integration-testing filter
我有一个集成测试,旨在启动我的 Spring Boot 应用程序:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = AppConfigCorrelationIdTestIt.class)
@WebIntegrationTest("server.port:0")
public class CorrelationIdTestIT {
Run Code Online (Sandbox Code Playgroud)
配置类在哪里:
@EnableConfigurationProperties
@ComponentScan
@EnableAutoConfiguration
@Configuration
public class AppConfigCorrelationIdTestIt {
Run Code Online (Sandbox Code Playgroud)
在应用程序中,我有一个定义的自定义 servlet 过滤器:
public class CorrelationHeaderFilter implements Filter {
Run Code Online (Sandbox Code Playgroud)
但是在测试我的应用程序时,我发现客户过滤器没有被实例化并注入到过滤器链中。我发现解决此问题的唯一方法是手动将其创建为 中的 bean AppConfigCorrelationIdTestIt
,然后它就可以完美运行。
@Bean
public CorrelationHeaderFilter correlationHeaderFilter() {
return new CorrelationHeaderFilter();
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么在应用程序启动时 Spring Boot 没有选择过滤器?
谢谢
通常,在测试类中可能使用 DefaultMockMvcBuilder。addFilter (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();
}
...
}
Run Code Online (Sandbox Code Playgroud)
我基于这个答案