运行 所有块 when-then,即使一个失败

Run all blocks when-then, even if one fail

我在规范中有多个块的方法 when-then

def "some test" () {
    given:
    ...

    when: 
    ...
    then: // <-- faild
    ...

    when:
    ...
    then:
    ...
}

如果第一个块 when-then 失败,则第二个不执行。是否可以在第一个失败的情况下同时执行两个?

这是不可能的,也没有意义,因为当你在一个测试用例中有多个 when 时,它们之间存在某种关系,第二个 when 的成功则取决于需要第一个 when 的成功和整个测试用例失败的行为。

如果您不假设该关系,则将其分成两个或多个单独的测试用例:

void 'some test'() {
    given:
    ...
    when: 
    ...
    then:
    ...
}

void 'another test'()
    given:
    ...
    when: 'second when from some test'
    ...
    then: 'second then from some test'
    ...
}

如果您有多个 when+then 共享 given 部分,那么您可以进行全局设置:

class MySpec extends Specification {    
    setup() {
        // code from the given section
    }

    void 'some test'() {
        ...
    }

    void 'another test'() {
        ...
    }
}

或者您可以创建共享方法,在需要时在所有测试用例中调用该方法。

如果您的多个 when 块仅在使用值上有所不同,那么请考虑使用 where 块。请参阅文档:http://spockframework.org/spock/docs/1.3/data_driven_testing.html#data-tables