【发布时间】: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