运行 代码在所有 class @Test 方法之后但在 TestNG 中的 @AfterGroups 之前

Run code after all class @Test methods but before @AfterGroups in TestNG

我想使用 TestNG 框架在我的应用程序中测试一些与数据库相关的 classes。

为了方便我添加了一个测试组"database"并做了一个测试classTestUtil,它包含两个方法:一个带有@BeforeGroups(groups = "database")注解,它正在设置 EntityManager 和一些其他资源,以及另一个标有 @AfterGroups(groups = "database") 的资源,它释放了这些资源。

我的大部分测试 class 都是在测试期间将一些实体持久化到数据库中,我想在 class 的所有测试方法被调用后清理数据库。

如果我使用@AfterClass 注释,它会在@AfterGroups 方法之后运行,这对我来说是不可接受的,因为清理方法仍然需要活动的 EntityManager 和其他与数据库相关的资源。

我可以用@Test(dependsOnMethods = "lastTestMethodInThisClass") 标记这些清理方法,但在这种情况下,每次向 [=28 添加新测试方法时,我都需要编辑此注释=].

还有其他更方便的方法来完成这项工作吗?

不,没有这样的注释允许您在 @Test 之后和 @AfterGroups 之前 运行 编码。但是,您可以将 org.testng.IMethodInterceptor 作为侦听器实现,并在 org.testng.IMethodInterceptor#intercept 中更改 @Test 顺序,而不是 @Test(dependsOnMethods = "lastTestMethodInThisClass") - 基本上在列表中搜索您的 'last test' 将您的 'last test' 其中 handles/closes 资源到最后并 return 修改列表。因此,当您添加新测试时,您不必更改 dependsOnMethods,因为拦截器会为您完成。

如果您想在调用所有测试后运行 清理方法,您可以在带有@AfterSuite 注释的清理方法中编写代码。这将在整个套件执行完毕后执行。