[英]Spring test closes contexts only after all tests in test suite are run
假设我们的测试编写如下(在单独的文件中):
@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 {(...)}
我不想使事情变得复杂,因此让我们所有人都假装现在所有这些测试都打印出类似“测试#没有完成执行”的内容。
还让我们在SomeBeansProvider.class中定义了这样的方法
@EventListener(ContextClosedEvent.class)
public void onContextClose(final ContextClosedEvent contextClosedEvent) {
log.info("Context closed.");
}
如果执行这些测试(使用TestNG运行程序),您将看到类似于以下内容的控制台输出:
由于CatTest和CatTest2具有相同的上下文,因此只会为其创建一个上下文,而为DogTest创建一个上下文。
问题是我希望在不再需要上下文后立即关闭它们。 我想知道是否有可能在执行过程中以某种方式自动对测试进行分组,这样就不会同时存在多个上下文实例。 所以我希望输出看起来像这样:
这有可能吗?
我们可以在测试用例中使用下面的Spring注释,以使其在类级别或方法级别的上下文关闭。
@DirtiesContext(classMode=ClassMode.AFTER_EACH_TEST_METHOD)
@DirtiesContext(classMode=ClassMode.AFTER_CLASS)
对于您的方案,您可以这样做,您可以在类级别使用@FixMethodOrder(MethodSorters.NAME_ASCENDING),并在想要关闭上下文的每个测试用例中注释@DirtiesContext(methodMode = ClassMode.AFTER_EACH_TEST_METHOD)。 并按照升序惯例将所有相关测试用例保持在类的最前或最后,以便它们可以连续运行,以便它们将使用相同的上下文(没有@DirtiesContext)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.