Допустимо ли иметь функции specflow в зависимости от других функций?

Я хочу написать приемочный тест в соответствии с

given the first test has run
when I do this new test
then this new test passes

Это связано с тем, что первый тест оставит данные в допустимом состоянии для выполнения следующего теста.

Могу ли я сделать это в Specflow?

2 ответа

Решение

Да, вы можете сделать это в specflow, но с небольшой оговоркой. этот подход не будет запускать один сценарий, а затем запускать другой, он будет запускать первый сценарий самостоятельно, затем зависимый сценарий снова будет запускать первый сценарий, а затем второй сценарий. Их порядок не может быть детерминированным. Мы избежали этой проблемы путем @ignore первый сценарий после написания зависимого сценария. Поскольку второй сценарий всегда запускает первый сценарий в любом случае, не имеет значения, что его @ignored, поскольку любой сбой в первом сценарии вызовет сбой во втором сценарии.

То, что мы сделали для достижения этой цели, таково:

Scenario: Some base scenario
    Given some condition
    When some action
    Then some result

потом в другой функции:

Scenario: Some dependant scenario
    Given some base scenario has happened
    And some other condition
    When some other action
    Then some other result

Ключ находится в определении шага Given some base scenario has happened

если вы определите этот шаг следующим образом:

[Given("some base scenario has happened")]
public void SomeBaseScenarioHasHappened()
{
    Given("some condition");
    When("some action");
    Then("some result");
}

вам нужно убедиться, что ваш класс, содержащий ваши определения шагов, является производным от базы Steps класс в specflow, чтобы получить доступ к Given, When а также Then методы:

[Binding]
public class MyStepClass: Steps

Вы можете найти больше информации об этом в вики specflow

Как говорит Sam Holder, вы можете сделать это с SpecFlow, однако я бы усомнился, хорошо ли это для ваших тестов.

Если вы посмотрите на ссылку Сэма на вики specflow, то увидите, что их пример составляет Given из нескольких Givens. Это имеет смысл для меня, так как Given переводит тест в очень конкретное состояние, чтобы против него могли работать утверждения. Он также не имеет побочных эффектов, как в теории Givens не может потерпеть неудачу.

Однако, когда мы приходим, чтобы составить Given от Whens это вводит возможность того, что тест будет в неправильном состоянии, прежде чем мы сможем тогда утверждать, что все правильно. Я признаю, что если вы просто пишете Given с шагами другого Scenario это смягчено как оригинал Scenario потерпит неудачу, и поэтому вы можете сначала решить эту проблему, но вам все равно придется найти этот провальный тест. Представьте, что вы строите свои тесты в течение нескольких лет, и в итоге получается несколько тысяч составленных таким образом. Одно простое серьезное изменение базового сценария и тысячи тестов не пройдены, что значительно затрудняет поиск реальной проблемы.

Другие вопросы по тегам