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

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

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

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

最佳答案

我知道这是一个古老的问题,并且我想您已经找到了解决方案,但是作为变通办法,我认为您需要在仍然希望进行事务处理的集成测试中显式指定static transactional = true。我们的Grails 2.3.7测试套件存在类似的问题...

关于grails - 如何在Spock集成测试中为每个测试类设置transactionnal选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310127/

相关文章:

java - 在 JasperReports 中显示导出为字节数组的图像

java - 使用 ClassPathXmlApplicationContext 到 applicationContext.xml 的正确路径

spring-boot - 由于缺少 around 注释,Spring Boot 测试无法加载 ApplicationContext

带有 Rails JSON API 的 Javascript 客户端框架 - 如何进行集成测试?

grails - Grails 3: 'defaultValue'是有效约束吗?

hibernate - 如何在grails中保存具有hasOne和belongsTo关系的对象

jquery - 用jQuery的Grails

grails - 如何让Grails接受可以为null的belongsTo关系?

grails - 没有在 Controller 中获取域类注释

java - 如果文件不相等,gradle 不更新依赖项