gpt4 book ai didi

spring-mvc - Spring Boot 集成测试 : @AutoConfigureMockMvc and context caching

转载 作者:行者123 更新时间:2023-12-04 01:12:21 25 4
gpt4 key购买 nike

我正在使用 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 请求时不涉及过滤器)。

最佳答案

似乎是 Spring Boot 1.5 引入的一个 Bug:
https://github.com/spring-projects/spring-boot/issues/9282

您可以尝试降级到 Spring Boot 1.4.x 或等待修复版本(计划下一个版本 1.5.5)。

更新:
除了“@AutoConfigureMockMvc”,您还可以手动配置您的 MockMVC:
https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/test-mockmvc.html

手动配置 MockMVC 在我的项目上运行良好。
“处理网络请求时不涉及过滤器”是什么意思?

关于spring-mvc - Spring Boot 集成测试 : @AutoConfigureMockMvc and context caching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42693789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com