如何告诉 Spock 以特定顺序运行哪个类

gro*_*ovy 5 groovy spock

我使用 Spock 进行测试,我有多个类要测试。我想告诉 Spock 按特定顺序测试每个类。有没有办法做到这一点?我注意到 TestNG 有@AfterTest注释,所以 Spock 有类似的东西吗?

Szy*_*iak 6

您不能指定 Spock 测试类的执行顺序。但是,Spock 允许您在@Stepwise向测试类添加注释时指定方法的执行顺序- 在这种情况下,Spock 将按从上到下的顺序执行所有方法,如果一个方法失败,它将忽略此测试类中的其余方法。

指示规范的功能方法应按其声明的顺序顺序运行(即使存在并行规范运行器),始终从第一个方法开始。如果一个方法失败,其余的方法将被跳过。在 super- 和 subspecs 中声明的特征方法不受影响。

@Stepwise对于方法之间具有(逻辑)依赖关系的规范很有用。特别是,它有助于避免方法失败后的连续错误,从而更容易理解真正出错的地方。

参考:http : //spockframework.org/spock/javadoc/1.1/spock/lang/Stepwise.html

@Stepwise
class StepwiseExample extends Specification {

    def "first test method to run"() {
        // ....
    }
    
    def "second test method to run"() {
        // ....
    }
    
    def "if previous method failed this one will be ignored"() {
        // ....
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 org.junit.runners.Suite

Jeff Scott Brown对 JUnit 的@Suite.SuiteClasses. 在这种情况下,您可以创建一个类,您可以在其中将测试类(规范)聚合到单个测试套件中,并且这些类将按照它们在套件中定义的顺序执行。考虑以下示例:

import org.junit.runner.RunWith
import org.junit.runners.Suite

@RunWith(Suite)
@Suite.SuiteClasses([
        Test2Specification,
        Test1Specification
])
class TestSuiteSpecification { }
Run Code Online (Sandbox Code Playgroud)

这间套房执行两种规格Test2Specification,并Test1Specification在定义的顺序:

在此处输入图片说明

  • @groovierthangroovy 这是您可以使用 Spock 实现的唯一有序执行。您不能像我在第一段中提到的那样指定测试类(规范)的顺序。基本上你不应该设计你的测试以特定的顺序运行——每个单元测试都是独立运行的,它不应该依赖于其他测试的副作用。 (2认同)