【问题标题】:@DirtiesContext does not work with @Nested tests@DirtiesContext 不适用于 @Nested 测试
【发布时间】: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


【解决方案1】:

在 Spring Framework 5.3 之前,Spring 不支持从 JUnit Jupiter @Nested 测试类的封闭类继承测试配置。

有关详细信息,请参阅 Spring 参考手册的@Nested test class configuration 部分。

【讨论】:

    【解决方案2】:

    供您参考,我在使用 SpringBoot 2.3 时遇到了同样的问题,并且该问题已在 SpringBoot 2.4 中得到解决。遗憾的是,我没有找到任何使它适用于 2.3 版的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多