如何在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"并不局限于这个测试类,而是影响在我的测试类之后触发的所有其他集成测试。

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

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

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

相关内容

  • 没有找到相关文章

最新更新