使用带有Geb的gradle时,如何根据我的规格确定执行顺序?

时间:2014-06-25 16:43:36

标签: gradle spock geb

我有一套规范需要按照确切的顺序运行,以使最后一个规范具有相关性。由于涉及服务器弹性的复杂用例(1台服务器停机,另一台服务器即将继续),这些规范需要相互依赖。

为了实现这一目标,我已将我的规格命名为" T101_Something1"," T102_Something2",..." T109_LastSpec"。

但是,当使用命令" gradle firefoxTest"运行我的测试时,测试以非字母数字顺序运行,导致最后一个规范无关紧要并且总是失败。

将gradle与Geb框架一起使用时,如何确定Spock规范的执行顺序?

2 个答案:

答案 0 :(得分:4)

Gradle的Test任务并未对测试类的执行顺序提供任何保证。 (如果将Test#maxParallelForks设置为大于1的值,它们甚至可以并行执行。)Spock / Geb的最佳实践是在与{{1}注释的同一测试类中保持依赖于顺序的测试}。如果必须在测试类之间强制执行顺序,可以查看JUnit 4测试套件,它们可以与Spock一起使用。另一个(可能不太理想)选项是在多个@Stepwise任务之间拆分测试执行,其执行顺序可以用Test控制。

答案 1 :(得分:3)

我们必须创建一个自定义的JUnit测试运行器并将其运行为:

  

gradlew -DfirefoxTest.single = CustomJUnitSpecRunner firefoxTest

CustomJUnitSpecRunner.groovy文件:

package spec

import org.junit.runner.RunWith
import org.junit.runners.Suite
import spec.Spec1
import spec.Spec2
import spec.Spec3

@RunWith(Suite.class)
@Suite.SuiteClasses([Spec1.class, Spec2.class, Spec3.class])
class CustomJUnitSpecRunner {
}

这使我们可以在每次运行时保证Spock规范的执行顺序。