假设我们的测试编写如下(在单独的文件中):
@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 {(...)}
我不想让事情变得复杂,所以让我们所有人都假装所有这些测试打印出类似于"测试#no执行完成的事情。"。
另外,让我们在SomeBeansProvider.class中定义这样的方法
@EventListener(ContextClosedEvent.class)
public void onContextClose(final ContextClosedEvent contextClosedEvent) {
log.info("Context closed.");
}
如果执行这些测试(使用TestNG runner),您将看到与此类似的控制台输出:
由于CatTest和CatTest2具有相同的上下文,因此只为其创建一个,而DogTest则另外一个。
问题在于我希望在不再需要上下文后关闭它们。我想知道是否可以在执行期间以某种方式自动对测试进行分组,因此同时没有多个上下文实例。所以我希望输出看起来像这样:
这甚至可能吗?
答案 0 :(得分:1)
我们可以在测试用例中使用下面的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)。