TestNG:确定接下来的测试方法
我的目标是在每个测试方法之后清除()我的javax.persistence.EntityManager。
以下是测试类的示例:
public class Example { @Test(dataProvider = "sampleDataProvider") public void testA(String parameter) { System.out.println(parameter); } @Test(dataProvider = "sampleDataProvider") public void testB(String parameter) { System.out.println(parameter); } }
通过向DB查询测试数据,然后使用以下格式编译,在dataProvider“sampleDataProvider”中使用entityManager: new Object[2][1]
。 请记住,在实际运行测试方法(使用@DataProvider注释)之前完成数据的查询和编译,并且我们实际上是在查询实体而不仅仅是字符串。
上面的测试类将如下运行:
testA("some queried entity 1") testA("some queried entity 2") testB("some queried entity 1") testB("some queried entity 2")
我最初的解决方案是使用@AfterTest
注释来清除entityManager。 然而,它会在testA
和testB
的第二次运行(或第二次测试实例)之前从entityManager中分离"some queried entity 2"
,这会导致对"some queried entity 2"
的成员进行读/写操作的问题。
我的目标是在测试方法之后清除entityManager,而不一定在测试方法的每个实例之后清除。
TestNG能否知道接下来要运行哪个测试? 这样,如果下一个测试是新测试,我可以轻松清除entityManager。
还有其他建议吗?
我不知道有什么简单的方法来获得下一个测试方法。 顺便说一下,使用@AfterGroups注释可以获得相同的结果:
@Test(groups = {"groupA"}) public void testA(...) { ... } @Test(groups = {"groupB"}) public void testB(...) { ... } @AfterGroups(groups = {"groupA"}) public void afterGroupA() { // clear entity manager here }
注意,TestNG不保证测试开始的顺序,直到您使用@Test批注的dependsOnMethods或dependsOnGroups参数或testng.xml文件中tag的“preserve-order”属性显式指定它。
UPDATE
作为替代方案,您可以使用自己的TestListiner 。 您可以实现onTestStart()方法,如果有必要,将执行清除。 AFAIU,调用的测试方法在部分填充的ITestResult中可用。 顺便说一句,要小心 – 这可能会导致隐式测试逻辑引起的问题(清除将无法从测试代码中看到)。