В дополнение к ответу @Stratadox (разделение сценариев по поведению) - Given
шаг никогда не должен ссылаться на пользовательский интерфейс или этап в пути пользователя.Страница, на которой находится пользователь, не имеет отношения к бизнес-логике.
Шаг Given
(например, шаг Arrange
в модульном тестировании) используется для настройки системы в заданном состоянии.Это состояние, установленное на шаге Given
, определяет результат (шаг Then
)
Например:
«заказ должен быть создан по указанному адресу» - этот результат можетпроизошли вследствие того, что клиент правильно ввел свой адрес (и в этом случае может потребоваться указать фактический адрес, чтобы его можно было подтвердить на шаге Then
).
«Мой кошелек должен быть вычтен из суммы платежа» - чтобы утверждать, что система находится в правильном состоянии после пополнения вашего кошелька, мы, вероятно, проверили бы какое-то сохранение данных, и мы такжепроверить на конкретную сумму.Какая сумма?Сумма, указанная вами на шаге Given
, напрямую связана с исходом этого сценария
Scenario: Being charged the correct amount on successful purchase of product
Given I have £10 in my wallet
When I purchase a Toaster Oven for £4
Then I should have £6 left in my wallet
«Покупателю необходимо автоматически назначить заказ посредством push-уведомления» - это результат, которыйможет быть заявлен как часть проверки «успешной покупки».От этого зависит только, была ли покупка успешной или нет.И вы можете связать вместе утверждения типа «Уведомление покупателя, записанная транзакция с уведомлением продавца» - и дать им одно имя, одну строку в вашем сценарии, например:
Given Jon has the following items in his basket:
| Macbook Pro | £3000 |
When Jon checks out his basket
Then a purchase of "xyz" for £3000 by Jon should have gone through
Последний шаг здесь подразумевает выполнение трех утверждений вкапот.Что хорошо, так как все знают, что подразумевается под "покупкой"