【问题标题】:Grails Test Suite - Specify test orderGrails 测试套件 - 指定测试顺序
【发布时间】:2015-06-12 00:17:12
【问题描述】:

我正在尝试让我的 geb-spock 功能测试以指定的顺序运行,因为 SpecA 将在运行期间创建 SpecB 所需的数据。

这个问题是关于按顺序运行规范,而不是规范中的单个测试方法。

我尝试更改规范名称以指示执行顺序,但没有奏效。我找到了一个使用测试套件的解决方案,并且测试按顺序添加到套件中,但是我找不到如何使测试套件在 Grails 中工作。

将它们明确指定为 grails test-app functional: SpecA SpecB 不是长期选择,因为将添加更多规范。

【问题讨论】:

  • 如果你想,你在第一次测试中初始化一些数据,然后在第二次使用这些数据,所以这是非常非常糟糕的主意。例如:当您在测试 SpecB 下遇到错误时,您会遇到这样的情况,所以一切都好,您应该只使用预初始化数据中的一件事运行 2 次测试。如此好的解决方案在 src 类或接口中创建,最后一个更好,用于初始化数据。例如:createuser(String email);
  • 我目前正在努力使测试独立,但我想知道是否可以指定执行顺序。
  • 我认为它们是按名称排序的。

标签: grails testing functional-testing spock geb


【解决方案1】:

对于您想要运行任务的顺序或任何顺序,我在 build.gradle 文件中执行以下操作:

def modules = ["X", "Y", "Z", "ZZ"]

if (modules.size() > 1) {
    for(j in 1 .. modules.size()-1 ) {
        tasks[modules[j]].mustRunAfter  modules[values[j-1]]        
     }
}

希望对您有所帮助。干杯!

【讨论】:

    【解决方案2】:

    不是您问题的真正答案,而是一般建议 - 不要这样做。从长远来看,在测试类之间引入数据设置依赖项将使您的套件变得脆弱。随着测试数量的增长以及随之而来的全局状态大小,对给定点的状态进行推理将变得越来越困难。稍后挂起测试或引入新的测试可能会破坏下游的许多测试。这是自找麻烦。

    理想情况下,您希望在测试之前立即设置测试所需的数据,然后再将其删除。 Grails Remote Control plugin 和测试数据夹具构建器是您的朋友。

    【讨论】:

    • 我现在已经对其进行了更改,以便 SpecB 在运行之前设置所有内容,试图弄清楚如何在启动时重置 DB。无论如何,我仍然对实现问题目标的任何方法感兴趣。
    【解决方案3】:

    你应该在一个地方定义你的初始化代码,如果它在两个 Spec 之间共享,那么创建一个超类可能是个好主意,其中包含可以在每个 Spec 的设置方法中调用的方法,或者一个专门用于声明要重用的测试方法。

    在任何情况下,单元测试的目的只是测试单个功能,它不应该负责设置其他测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2011-05-04
      • 1970-01-01
      • 2013-10-11
      相关资源
      最近更新 更多