在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”不仅限于此测试类,而是影响我的测试类之后触发的所有其他集成测试。
我知道测试有按字母顺序排列的执行顺序。所以我知道如果我将我的测试类重命名为要运行的最后一个测试类,它工作正常,我的所有测试都是成功的。但我认为这不是解决问题的理想方法。
所以我的问题是:如何以不影响其他集成测试的方式定义测试类是非事务性的?
答案 0 :(得分:0)
我知道这是一个老问题,我想你已经找到了解决方案,但作为一种解决方法,我认为你需要在集成测试中明确指定static transactional = true
,你仍然希望成为事务性的。我们的Grails 2.3.7测试套件遇到了类似的问题...