java - TestNG:确定下一步是哪些测试方法

标签 java testng entitymanager

我的目标是在每个测试方法之后清除()我的 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);
    }
}

在数据提供者“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。但是,它会在 testAtestB 的第二次运行(或第二个测试实例)之前从 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 文件中标记的“preserve-order”属性明确指定它。

更新

作为替代方案,您可以使用自己的 TestListiner .您可以实现 onTestStart()方法,如果有必要,它将进行清理。 AFAIU,调用的测试方法在部分填充的 ITestResult 中可用。顺便说一句,小心 - 这可能会导致由隐式测试逻辑引起的问题(测试代码中看不到清除)。

关于java - TestNG:确定下一步是哪些测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720715/

相关文章:

java - 将工作发送到需要初始化的工作池

java - 当不包含可选查询时 Swagger 抛出 400 错误

java - 在不同的浏览器 session 中运行测试,但始终得到 'NoSuchSessionException: Session ID is null. Using WebDriver after calling quit()?'

maven - 我可以通过 Maven 运行特定的 testng 测试组吗?

java - 如何通过电子邮件将 xslt 报告发送给 xls 文件中给出的用户列表?

java - Eclipselink/JPA 保留一次记录还是单独插入每个字段?

java - 从 hibernate 变更集中删除实体是否与调用 EntityManger.detach() 一样简单?

java - 替换 Camel v2.16.0 中弃用的 beanRef()

java - Fragment 未在 Activity 中完全显示

Java EntityManager 合并和 @PrePersist