我有一个旨在启动我的 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/