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

Grails 如何在spock集成测试中为每个测试类设置transactionnal选项?,grails,groovy,integration-testing,spock,Grails,Groovy,Integration Testing,Spock,在grails项目(版本2.3.7)中,我使用Spock进行了集成测试: class SimpleIntegrationTests extends IntegrationSpec{ void "test an action from controller to database"(){...} } 此集成测试使用Spring批启动批。从现有事务启动批处理时,Spring批处理不接受: java.lang.IllegalStateException: Existing transactio

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

class SimpleIntegrationTests extends IntegrationSpec{
   void "test an action from controller to database"(){...}
}
此集成测试使用Spring批启动批。从现有事务启动批处理时,Spring批处理不接受:

java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again
因此,我告诉我的集成测试在没有事务的情况下运行,使用:

static transactional = false
这样,测试运行成功

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

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


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

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