当前位置: 首页 > 知识库问答 >
问题:

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

百里弘致
2023-03-14

在grails项目(版本2.3.7)中,我有一个使用Spock的集成测试:

class SimpleIntegrationTests extends IntegrationSpec{
   void "test an action from controller to database"(){...}
}

这个集成测试用Spring batch启动了一个批。从现有事务启动批处理时,Spring batch不接受:

java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again
static transactional = false

这样,测试就成功运行了。

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

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

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

共有1个答案

凌和颂
2023-03-14

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

 类似资料:
  • 下面是我的应用程序主类: 但当我运行这个程序时,我得到了一个非常奇怪的错误: groovyx.net.http.restclient:解析'application/json'响应时出错

  • 下面是一个最小的例子: project/build.scala src/test/scala/helpers.scala 然后,在sbt中,“test”起作用: 但是“it:test”不能编译:

  • 在我的应用程序中有,它有一个操作,如下所示: 现在,我正在测试视图和模型,如下所示: 但是我的测试用例失败了,stacktrace如下: 正在运行2个spock测试。。。第1页,共2页 有什么问题吗。

  • 问题内容: 我有一个Java方法,可在Mongo集合的两个字段上创建索引。我应该获取集合的索引信息,然后检查索引的名称和字段是否正确。为此编写集成测试的最干净方法是什么?使用自定义的Hamcrest匹配器查看索引是否在集合中是否有意义? 问题答案: 在春天 使用,您可以获取的列表,代表MongoDB集合的索引。由于这是一个常规列表,因此您可以结合使用和进行断言: 如果您觉得这太难以理解或不方便使用

  • 问题内容: 我使用spock编写测试用例,使用jenkins运行和发布我的测试用例。我能够得到报告的代码覆盖率,但是声纳 仅 向我显示 Java 单元测试用例;在 常规测试案例是完全缺失 以下pom.xml用作参考 https://github.com/kkapelon/java-testing-with- spock/blob/master/chapter7/spring-standalone-