【发布时间】:2018-08-23 06:20:16
【问题描述】:
我创建了记录和保存所有请求的过滤器,这是其中的一部分:
@Component
public class RequestFilter extends OncePerRequestFilter {
@Value("${app.endpoint}")
private String requestMapping;
private final RequestRepository requestRepository;
@Autowired
public RequestFilter(RequestRepository requestRepository) {
this.requestRepository = requestRepository;
}
....
}
当应用程序运行时,requestMapping 会从 spring 上下文中正确读取,但是
当我为该过滤器创建测试时 requestMapping 为空
@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
@ContextConfiguration(classes = {MyApplication.class})
@AutoConfigureMockMvc
@ActiveProfiles("test")
public class FilterTest {
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
private RequestRepository requestRepository;
@Autowired
protected MockMvc mockMvc;
@Before
public void setup() {
RequestFilter rpmRequestFilter = new RequestFilter(this.requestRepository);
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.addFilter(invalidVpmRequestFilter)
.build();
}
}
当然,在 application-test.properties 我已经配置了这个属性:
app.endpoint=/log/save
有人知道问题出在哪里吗?为什么这在测试中不起作用?
【问题讨论】:
-
它应该可以正常工作。您正在自己创建过滤器的新实例,而不是让 Spring 管理过滤器。
标签: spring-mvc spring-boot mockito