我有一套规范需要按照确切的顺序运行,以使最后一个规范具有相关性。由于涉及服务器弹性的复杂用例(1台服务器停机,另一台服务器即将继续),这些规范需要相互依赖。
为了实现这一目标,我已将我的规格命名为" T101_Something1"," T102_Something2",..." T109_LastSpec"。
但是,当使用命令" gradle firefoxTest"运行我的测试时,测试以非字母数字顺序运行,导致最后一个规范无关紧要并且总是失败。
将gradle与Geb框架一起使用时,如何确定Spock规范的执行顺序?
答案 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规范的执行顺序。