Grails测试套件-指定测试顺序

Grails测试套件-指定测试顺序,grails,testing,functional-testing,spock,geb,Grails,Testing,Functional Testing,Spock,Geb,我试图让我的geb spock功能测试以指定的顺序运行,因为SpecA将在运行期间创建SpecB所需的数据 这个问题是关于按顺序运行规范,而不是规范中的单个测试方法 我尝试更改规范名称以指示执行顺序,但没有成功。我找到了一个使用测试套件的解决方案,测试按顺序添加到套件中,但我找不到如何使测试套件在Grails中工作 明确指定它们为grails test app functional:SpecA SpecB不是长期选项,因为将添加更多的规范。对于顺序或您希望运行任务的任何顺序,我在build.gr

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

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

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


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

对于顺序或您希望运行任务的任何顺序,我在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]]        
     }
}

希望有帮助。干杯

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


理想情况下,您希望在测试之前立即设置测试所需的数据,然后将其删除。Grails和test data fixture builders是您在这里的朋友。

您应该在一个地方定义初始化代码,如果它在两个规范之间共享,那么最好创建一个超类,其中包含可以在每个规范的设置方法中调用的方法,或者创建一个用于声明要重用的测试方法的整个类


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

如果您愿意,您可以在第一次测试中初始化一些数据,然后在第二次测试中使用这些数据,所以这是一个非常糟糕的主意。例如:当您在测试规范下有一个错误时,您会遇到这样的情况,所以所有测试都是好的,您应该只使用prevision初始化数据中的一个内容运行两个测试。所以在src类或接口中创建好的解决方案,最好是初始化数据。例如:createuserString电子邮件;我目前正在致力于使测试独立,但我想知道是否可以指定执行顺序。我认为它们按名称排序。我现在已经更改了它,以便SpecB在运行之前设置所有内容,并试图找出如何在启动时重置DB。。不管怎样,我仍然对实现问题目标的任何方法感兴趣。。