spring-boot - @DirtiesContext 不适用于 @Nested 测试
问题描述
经过数小时的谷歌研究后,我仍然无法弄清楚如何@DirtiesContext
与@Nested
课程一起使用。假设以下集成测试类:
@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc(addFilters = false)
public class StuffIntegrationTests {
@Autowired
private StuffRepository stuffRepository;
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
// ...
@BeforeEach
private void setUp() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
// ...
}
@DisplayName("POST - /stuffs")
@Nested
class saveStuff{
@DisplayName("Return 2xx")
@Nested
class Return2xx{
// some test methods
@DisplayName("Return 4xx")
@Nested
class Return4xx{
// some tests methods
}
@DisplayName("GET - /stuffs/{stuffId}")
@Nested
class findStuffById{
@DisplayName("Return 2xx")
@Nested
class Return2xx{
// some test methods
@DisplayName("Return 4xx")
@Nested
class Return4xx{
// some tests methods
}
}
如您所见,我想通过按 Enpoints 将其拆分为嵌套类来使该类更具可读性,并且对于每个 Endpoint,都有嵌套类按 Http 响应状态拆分。
我尝试@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
在多个级别上使用它并没有在每个类之前清理 Spring Context,如果我把 @DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD)
每个方法都放在上面,结果是一样的。
我的目标是在类的每个方法之前清理 Spring Context,SaveStuff
并在类开始时只清理一次上下文findStuffById
非常感谢你的帮助。
解决方案
@Nested
在 Spring Framework 5.3 之前,Spring不支持从 JUnit Jupiter 测试类的封闭类继承测试配置。
有关详细信息,请参阅 Spring 参考手册的@Nested
测试类配置部分。
推荐阅读
- python - Python 认为单元格值是日期时间,但它不是
- docker - 使用 Docker SDK for golang 通过 ssh 访问远程 docker daemon
- php - 如何避免自动提交插入语句
- css - Angular6:如何为复选框添加边框颜色
- microsoft-graph-api - 从共享邮箱发送时出现 ErrorQuotaExceeded
- mysql - MySQL 选择子查询和限制
- c# - 如何解决单元测试的错误“当前上下文中不存在名称'myClass'”?
- python - NoSuchElementException 之后如何继续
- java - 如何处理 Rest 模板 api 错误响应并转换为类型安全的 Json?
- docker - 如何更改主机上的 docker 卷地址