如何在spock集成测试中为每个测试类设置transactionnal选项?

时间:2014-08-14 14:06:28

标签: grails groovy integration-testing spock

在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”不仅限于此测试类,而是影响我的测试类之后触发的所有其他集成测试。

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

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

1 个答案:

答案 0 :(得分:0)

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