首页 > 解决方案 > 运行所有块when-then,即使一个失败

问题描述

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

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

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

    when:
    ...
    then:
    ...
}

如果第一个阻塞 when-then 失败,则第二个不会执行。即使第一个失败,是否可以同时执行?

标签: unit-testingspock

解决方案


这是不可能的,也没有任何意义,因为当你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


推荐阅读