【发布时间】:2020-09-20 08:33:11
【问题描述】:
在 Google 上进行了数小时的研究后,我仍然无法弄清楚如何将 @DirtiesContext 与 @Nestedclasses 一起使用。假设以下集成测试类:
@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 上下文,如果我在每个方法上放置@DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD),结果是相同的。
我的目标是在 SaveStuff 类的每个方法之前清理 Spring 上下文,并在 findStuffById 类的开头只清理一次上下文
非常感谢您的帮助。
【问题讨论】:
-
问题更根本:SpringExtension 不支持嵌套测试。如果你想使用它们,你必须在每个嵌套测试类中复制所有与弹簧测试相关的注释。
-
@johanneslink 感谢您的回复。我试图在每个嵌套类上添加注释,我的结论是:-脏>
标签: spring-boot integration-testing junit5