java - 在 TestNG @DataProvider 中进行的数据库更新不会回滚

标签 java spring-boot testng spring-transactions testng-dataprovider

在我的自动化测试中,我想使用 @DataProvider 来 1.) 执行一些数据库更新,以保证我要测试的数据的状态,以及 2.) 返回将在此类环境中工作的测试数据。

我发现@DataProvider主体中的更新成功,然后我的测试中所做的更新成功,所有断言通过,然后回滚测试更新。但是,@DataProvider 更新不会回滚,而是在测试完成后保留。

有没有办法回滚@DataProvider主体内部进行的数据库更新?

最佳答案

您的问题类似于How to delete data only after all tests, based on inputs from data provider, are run?

它的答案适用于您。

<小时/>

更新

就您而言,@DataProvider 是一个糟糕的选择。在 TestNG 中,您只能使用 @DataProvider 提供的结果,并且它们在套件之前运行。您有多种方法可以解决您的问题。

  • 创建一个监听器,将数据库事务与相关的@DataProvider结果连接起来。它必须实现ITestListener。在每个测试完成事件上,您的监听器将回滚所需的事务。
  • 第二个选项与第一个选项类似,但您的 @DataProvider 对数据库不执行任何操作,它只是提供一些输入,这些输入应由 @BeforeMehtod@AfterMethod 处理,分别更新和回滚。在这种情况下,您的所有上下文都可以存储在特定的测试类中。
  • 您还可以使用上述原则创建一个新注释,以提供和管理您的业务实体。

关于java - 在 TestNG @DataProvider 中进行的数据库更新不会回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45291371/

相关文章:

java - Linux环境下Mule应用与mysql数据库的数据库连接问题

java - 为什么我的合并排序比快速排序慢?

java - Mac 上 Eclipse 上的 Glassfish

java - 到达 Controller 时子类型数据丢失

gradle - 在Gradle中为TestNG设置VM选项

java - 在 jboss 7.0.0 GA 中启用 TLSv1.3

spring-boot - Spring Boot应用程序已弃用java.security.egd = file :/dev/./urandom吗?

java - 使用 Java Spring Boot 获取 Json 项目的值

java - 生成 JAVA 文件并在运行时使用它们

java - 我们能否将测试结果 TestNG 报告或范围报告集成到 Microsoft 团队