【问题标题】:Speed up Integration Test Suite加速集成测试套件
【发布时间】:2014-02-21 16:13:22
【问题描述】:

我正在尝试加快我的集成测试套件的运行速度。对于我拥有的每个集成测试类,它会在运行测试之前从头开始重新创建整个内存 H2 数据库——这占用了最多的时间。我正在测试的所有方法都在 Spring/Hibernate 堆栈中。

有没有办法避免为每个测试重新创建数据库,同时确保数据库处于干净状态?

我正在测试的一些方法调用启动新 Hibernate 事务的方法 - 所以不确定是否可以在每次测试之前开始新事务并在之后回滚所有内容。

【问题讨论】:

标签: java spring integration-testing h2


【解决方案1】:

这是使用@Transactional 和@RunWith(SpringJunit4TestRunner.class) 时的默认行为(回滚)。

有关完整信息,请参阅Integration Testing Chapter。

【讨论】:

  • 测试是否回滚数据库,即使它是具有 @Transactional(propagation = Propagation.REQUIRES_NEW) 的测试方法?
  • 另外,如果我将Transaction 放在每个测试的类级别,会导致所有测试方法回滚吗?
  • 否; REQUIRES_NEW 启动一个新事务,该事务将在返回测试用例之前提交。您需要在测试用例中添加补偿更新才能撤消它。是的,类级别 @Transactional 使所有测试方法都具有事务性。
  • 是否有使用 Spring 的内置解决方案来处理 REQUIRES_NEW?处理测试命中具有“REQUIRES_NEW”的每个方法可能需要大量工作。
  • 您可以编写一个自定义事务管理器来执行回滚而不是提交;可能不会太难;只需子类化HibernateTransactionManager 并覆盖提交并调用rollback。
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 2012-12-16
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多