我想使用TestNG框架在我的应用程序中测试一些与数据库相关的类。
为了方便起见,我添加了一个测试组"数据库"并制作了一个测试类TestUtil,它包含两个方法:一个是@BeforeGroups(groups ="数据库")注释,它设置了EntityManager和其他一些资源,另一个标有@AfterGroups (groups =" database"),这释放了这些资源。
我的大多数测试类在测试期间将一些实体持久化到数据库,并且我希望在调用类的所有测试方法后清理数据库。
如果我使用@AfterClass注释,它会在@AfterGroups方法之后运行,这对我来说是不可接受的,因为清理方法仍然需要活动的EntityManager和其他与DB相关的资源。
我可以使用@Test标记这些清理方法(dependsOnMethods =" lastTestMethodInThisClass"),但在这种情况下,我每次添加新的测试方法时都需要编辑此注释。类。
还有另一种更方便的方法来完成这项工作吗?
答案 0 :(得分:0)
不,没有这样的注释允许您在所有@Test
之后和@AfterGroups
之前运行代码。但是,@Test(dependsOnMethods = "lastTestMethodInThisClass")
代替org.testng.IMethodInterceptor
,您可以将@Test
作为监听器并在org.testng.IMethodInterceptor#intercept
中更改dependsOnMethods
顺序 - 基本上搜索列表中的“最后一个测试”,将“最后一个测试”放入处理/关闭资源到最后并返回修改后的列表。因此,当您添加新测试时,您不必更改{{1}},因为拦截器会为您执行此操作。
答案 1 :(得分:0)
如果要在调用所有测试后运行清理方法,可以使用@AfterSuite
注释在清理方法中编写代码。这将在整个套件完成执行后执行。