当前位置: 首页 > 知识库问答 >
问题:

用事务和回滚包围测试类

杨柏
2023-03-14
@RunWith(SpringRunner.class)
@SpringBootTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@EnableTransactionManagement
public class AnIntegrationTest {
   @Test
   public void t001startProcess() {
       // ...
   }
   @Test
   public void t002addItem() {
       // ...
   }
}

测试将创建的数据保存在H2测试数据库中,随后的测试在测试套件中执行时将失败。

我如何用事务绕过类的所有测试,并在类的所有测试执行后回滚所有数据库修改?

共有1个答案

左丘元徽
2023-03-14

我知道这不可能是你要求的完美解决方案,但这里有一些帮助

如果您对集成测试的要求是对添加的行执行select/update操作,那么您可以在测试类的@before注释方法中执行insert查询,然后在@after注释方法中执行delete查询。

这将确保每次执行测试方法时都添加记录,然后删除记录。但是,如果您希望在一个测试方法中更新的数据在下一个测试方法执行期间出现,那么此解决方案将不起作用

Class ClassToBeTested {

      @Before
      public void setUp() {
      // write insert queries here
      }

      @Test
      public void method1() {
      // Integration test here
      }

      @Test
      public void method2() {
      // Integration test here
      }

      @After
      public void destroySetUp() {
      // write delete queries here
      }
}
 类似资料:
  • 我正在努力做一个工作junit测试,以回滚在骆驼路由过程中发生的操作。 我有一个骆驼路线设置,可以监听目录。它需要一个csv文件。当csv文件出现时,它会创建新的SearchAnalytics数据。它会在csv文件中的每一行向表中添加新行。 我放的默认的Spring事务方法似乎不适用于骆驼路由上发生的操作。 下面的代码可以工作。但是它会永久保存数据,并且不会回滚插入。这意味着测试只会通过一次,除非

  • 问题内容: 我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到: JUnit测试是: 如你所见,我明确声明不回滚此方法。 Spring JUnit支持是否总是将rollback设置为true? 问题答案: 它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。 顺便说一句,这个注释应该是足够的:

  • 问题内容: 我的问题: 我可以成功测试CRUD服务的运行情况。我在@Before [setUp()]上执行插入操作,并在@After [tearDown()]上进行相同数据删除操作,但今后,我需要支持事务处理,而不是编写用于插入和删除的代码。 我可以成功获取实体的单个记录,但是当我触发搜索查询或尝试获取多个实体时,我得到: com.liferay.portal.kernel.bean.BeanLo

  • 迁移工作得很好,但事务根本不起作用。 我尝试公开我的设置: 运行在docker容器中的MariaDB 10.1(我已经证明了测试中使用的所有表都在InnoDB中,因此支持事务处理) 基测试类正在使用 我尝试了一个单独的连接与一起进行测试,并使用默认连接进行测试。事务也不起作用

  • 问题内容: 在Hibernate中,当我在事务中有一个对象,然后回滚它时,保存的对象仍保留在DB中。奇怪,因为使用or 方法不会发生此问题,而只会使用。 这是我正在使用的代码: 这是 HibernateUtil 类(只是涉及的函数,我保证该方法能正常工作- 有一个Interceptor处理程序,但现在不重要了): 谢谢 问题答案: 检查数据库是否支持回滚,即是否使用的是InnoDB表而不是MyIS