【问题标题】:How to set the transactionnal option per test class in a spock integration test?如何在 spock 集成测试中为每个测试类设置 transactionnal 选项?
【发布时间】:2014-08-14 14:06:27
【问题描述】:

在一个 grails 项目(2.3.7 版)中,我使用 Spock 进行了集成测试:

class SimpleIntegrationTests extends IntegrationSpec{
   void "test an action from controller to database"(){...}
}

此集成测试使用 Spring Batch 启动批处理。从现有事务启动批处理时,Spring 批处理不接受:

java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again

所以我告诉我的集成测试在没有事务的情况下运行:

static transactional = false

执行此操作,测试运行成功。

但我的项目中还有其他集成测试,需要事务才能正确运行。 而且我的测试类中的“transactionnal = false”指令并不局限于这个测试类,而是会影响我的测试类之后触发的所有其他集成测试。

我知道测试的执行顺序是按字母顺序排列的。所以我知道,如果我将我的测试类重命名为最后一个要运行的测试类,它工作正常,并且我的所有测试都成功。但我认为这不是问题的理想答案。

所以我的问题是:如何以不影响其他集成测试的方式定义测试类是非事务性的?

【问题讨论】:

    标签: grails groovy integration-testing spock


    【解决方案1】:

    我知道这是一个老问题,我想您已经找到了解决方案,但作为一种解决方法,我认为您需要在您仍希望进行事务性的集成测试中明确指定 static transactional = true。我们的 Grails 2.3.7 测试套件也有类似的问题...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      • 2012-12-09
      • 2012-07-10
      • 1970-01-01
      相关资源
      最近更新 更多