运行 代码在所有 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
注释的清理方法中编写代码。这将在整个套件执行完毕后执行。
我想使用 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
注释的清理方法中编写代码。这将在整个套件执行完毕后执行。