gpt4 book ai didi

java - Spring测试仅在测试套件中的所有测试运行后才关闭上下文

转载 作者:行者123 更新时间:2023-11-30 02:08:22 28 4
gpt4 key购买 nike

假设我们的测试编写如下(在单独的文件中):

@SpringBootTest(classes = {SomeBeansProvider.class, FunnyCatBeansProvider.class})
public class CatsTest extends AbstractTestNGSpringContextTests {(...)}

@SpringBootTest(classes = {SomeBeansProvider.class, FunnyCatBeansProvider.class})
public class CatTest2 extends AbstractTestNGSpringContextTests {(...)}

@SpringBootTest(classes = {SomeBeansProvider.class, DogBeansProvider.class})
public class DogsTest extends AbstractTestNGSpringContextTests {(...)}

我不想让事情变得复杂,所以现在让我们假装所有这些测试都打印类似“Test #noexecutioncompleted”的内容。

我们也可以在 SomeBeansProvider.class 中定义这样的方法

@EventListener(ContextClosedEvent.class)
public void onContextClose(final ContextClosedEvent contextClosedEvent) {
log.info("Context closed.");
}

如果您执行这些测试(使用 TestNG 运行程序),您将看到类似于以下内容的控制台输出:

  1. 测试 1 执行已完成。
  2. 测试 2 执行已完成。
  3. 测试 3 执行已完成。
  4. 上下文已关闭。
  5. 上下文已关闭。

由于 CatTest 和 CatTest2 具有相同的上下文,因此只会为它们创建一个上下文,并为 DogTest 额外创建一个上下文。

问题是我希望上下文在不再需要后立即关闭。我想知道是否可以在执行过程中以某种方式自动对测试进行分组,这样就不会同时出现多个上下文实例。所以我希望输出看起来与此类似:

  1. 测试 1 执行已完成。
  2. 测试 2 执行已完成。
  3. 上下文已关闭。
  4. 测试 3 执行已完成。
  5. 上下文已关闭。

这可能吗?

最佳答案

我们可以在测试用例中使用下面的 Spring 注释来使其在类级别或方法级别上下文关闭。

@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD)

@DirtiesContext(classMode=ClassMode.AFTER_CLASS)

For your scenario you can do like this, You can use @FixMethodOrder(MethodSorters.NAME_ASCENDING) at class level,and annotate @DirtiesContext(methodMode=ClassMode.AFTER_EACH_TEST_METHOD) at each test case wherever you want to close the context. and keep the all the related test cases either first or last in class according to the Ascending order convention so that they will run consecutively so that they will be using the same context(without @DirtiesContext).

关于java - Spring测试仅在测试套件中的所有测试运行后才关闭上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50800667/

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