我正在使用Spring Boot 1.5.1构建非常基本的Web应用程序,并希望创建用于检查REST端点的集成测试。根据文档建议,可以使用MockMvc。Spring Boot集成测试:@AutoConfigureMockMvc和上下文高速缓存
这是非常简单的测试类:
package foo.bar.first;
import ...
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTest1 {
@Autowired
private WebApplicationContext context;
@Autowired
private MockMvc mvc;
@Test
public void shouldStartWebApplicationContext() {
assertThat(context).isNotNull();
}
@Test
public void shouldReplyToPing() throws Exception {
mvc.perform(get("/ping"))
.andExpect(status().isOk());
}
}
正如预期的那样,它开始全面应用环境和运行测试。
后来我创建了其他类似的测试类,发现品牌新的应用程序上下文启动时为每个测试类。实验表明,上下文仅在来自相同包的测试类之间共享。
例如,如果同一测试类复制多次,然后上下文如下:
foo.bar
first
ApplicationTest1 (shared context)
ApplicationTest2 (shared context)
second
ApplicationTest3 (brand new context)
而且进一步研究表明,它与@AutoConfigureMockMvc
注释。如果注释和MockMvc相关的测试用例被删除,那么所有三个类成功共享共享相同的上下文。
所以问题是如何获得共享上下文的所有测试与MockMvc?
注意:其他资源建议使用MockMvcBuilders.webAppContextSetup(context).build()
获取MockMvc实例,但它不适用于我(它不涉及处理Web请求时的过滤器)。
我有完全相同的问题。我发现的唯一解决方法是不使用'mockMvc'并使用'TestRestTemplate',这绝对不是一个好的解决方案。 –
这个答案可能会有所帮助。 https://stackoverflow.com/a/41051585/1849366https://stackoverflow.com/a/41051585/1849366 –
您是否尝试过在基类中设置mockmvc,并为每个测试套件扩展该类?我也很好奇为什么你需要测试来分享上下文?'我喜欢[这个设置](https://spring.io/blog/2016/08/30/custom-test-slice-with-spring-boot -1-4)在spring.io博客中报道。独立测试每个控制器。 –