我的目标是在每个测试方法之后清除()我的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查询测试数据,然后使用以下格式编译的new Object[2][1]
,在dataProvider“sampleDataProvider”中使用entityManager。请记住,数据的查询和编译都是在实际运行测试方法(使用@DataProvider注释)之前完成的,而我们实际上是在查询实体,而不仅仅是字符串。
上面的测试类会像这样运行:
testA("some queried entity 1")
testA("some queried entity 2")
testB("some queried entity 1")
testB("some queried entity 2")
我的初始解决方案是使用@AfterTest
注释来清除entityManager。但是,它会在"some queried entity 2"
和testA
的第二次运行(或第二个测试实例)之前从entityManager中分离testB
,这会导致对{{1}成员的读/写操作出现问题}}
我的目标是在测试方法之后清除entityManager ,而不一定在测试方法的每个实例之后清除。
TestNG能否知道接下来要运行哪个测试?这样,如果下一个测试是新的,我可以轻松清除entityManager。
还有其他建议吗?
答案 0 :(得分:0)
我不知道有什么简单的方法来获得下一个测试方法。顺便说一句,你可以使用@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文件中标记的“preserve-order”属性显式指定它。
<强>更新强>
作为替代方案,您可以使用自己的TestListiner。您可以实施onTestStart()方法,如果有必要,将进行清算。 AFAIU,调用的测试方法在部分填充的ITestResult中可用。顺便说一句,小心 - 这可能会导致隐式测试逻辑引起的问题(从测试代码中看不到清除)。