Запускать все блоки когда-то, даже если один не получится - PullRequest
1 голос
/ 08 ноября 2019

У меня есть метод в спецификации с несколькими блоками когда-то

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

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

    when:
    ...
    then:
    ...
}

Если первый блок когда-то вышел из строя, то второй не выполняется. Возможно ли выполнить оба, даже если первый не удался?

1 Ответ

2 голосов
/ 08 ноября 2019

Это невозможно и не имеет смысла, потому что, когда у вас есть несколько 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

...