我正在使用Spring Boot 1.5.1构建非常基本的Web应用程序,并希望创建用于检查REST端点的集成测试。 正如文档所推荐的,可能会使用MockMvc。
这是一个非常简单的测试类:
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请求时不涉及过滤器)。
答案 0 :(得分:3)
这似乎是Spring Boot 1.5引入的Bug: https://github.com/spring-projects/spring-boot/issues/9282
您可以尝试降级到Spring Boot 1.4.x或等待修复版本(计划用于下一版本1.5.5)。
<强>更新强> 而不是&#34; @ AutoConfigureMockMvc&#34;您也可以手动配置MockMVC: https://docs.spring.io/spring-security/site/docs/current/reference/html/test-mockmvc.html
手动配置MockMVC在我的项目上运行正常 你是什么意思&#34;它在处理网络请求时不涉及过滤器&#34;?