Учитывая, когда при тестировании - мне нужно "когда"?
Я внедряю некоторые тесты дыма на наш сайт.
Я использую формат Given/When/Then для существующих автоматических приемочных тестов/рассказов пользователей. Но теперь я хочу сделать начальный smoke test из:
Given I'm on the homepage
Then I should see "Welcome To The Site"
Я что-то упустил? "О'кей" не иметь "Когда?"
Используемые инструменты: MVC3, SpecFlow, Nunit, Watin
Ответы
Ответ 1
Полностью допустимый синтаксис для пропуска любого из заданных, когда или тогда (и даже для их смешивания в любом порядке - specflow не заботится.)
Однако, с целью удобочитаемости, вместо того, чтобы опускать, когда я часто перефразирую данное, т.е.
When I view the homepage
Then I should see "Welcome To The Site"
Я предпочитаю пропускать данный раздел, потому что когда предполагается указать, что тестируемое действие.
Если код для привязки к шагу один и тот же, и вы хотите его повторно использовать, вы всегда можете привязать свой данный и мой, когда к тому же методу.
[Given(@"I'm on the homepage"]
[When(@"I view the homepage"]
public void NavigateToHomePage()
{
...
Ответ 2
Я думаю, что вы действительно упустили этот момент. Вам ВСЕГДА нужен When
. Это то, что вы должны тестировать! То, что вы можете оставить, это Givens
Что вы должны сказать:
When I visit the homepage
Then I should see "Welcome To The Site"
Given When Then
- действительно лучший способ представления конечного автомата.
Given some initial state (in your case, non)
When I perform some action (in your case, visiting the homepage)
Then I have some final state (in your case, text displayed to a user)
Мне нравится делать все, что должно присутствовать, чтобы позволить When
произойти. В вашем случае, похоже, нет никакого начального состояния. Но подумайте, есть ли у вас веб-приложение. Перед посещением главной страницы вам нужно будет иметь начальное состояние (вам нужно будет убедиться, что пользователь вошел в систему);
Given a user (user must be stored in the database)
And the user is logged in (a logged in user must be in the session)
When the user visits their homepage
Then the user should see "Welcome To Your Homepage"
Альтернативный сценарий:
Given no logged in user (some people would leave this Given out, but I add it for completness)
When a user visits their homepage
Then the user should be redirect to the login page
Как кто-то правильно указал, большинство инструментов BDD фактически не различают Given When Then
, но вы должны! Вербальная природа "Дано когда" была выбрана для того, чтобы нам легче понять и помочь нашим мысленным процессам. Машине все равно, что вы называете шагами. В этом случае вы должны приложить все усилия, чтобы правильно использовать ключевые слова в любое время.
Ответ 3
Я бы сказал:
Given I have requested the home page
When the home page loads
Then I should see 'Welcome To The Site'
Ответ 4
Я склонен видеть данное как эквивалент традиционных предпосылок. Когда это эквивалентно тестовому действию. И тогда как эквивалент ожидаемого результата.
Поэтому, если нет предварительных условий, я бы оставил "Дано" и просто сосредоточился на "Когда" и "Затем":
When I'm on the homepage
Then I should see "Welcome To The Site"
Specflow позволит вам использовать "Дано" или "Когда", но Visual Studio также позволит вам написать один класс длиной 1000 строк. Просто потому, что оба возможны, не означает, что это либо "правильно".
Ответ 5
Извините за воскрешение потока...
Я бы, наверное, пошел с:
Given there is a homepage
When I view the homepage
Then I should see "Welcome To The Site"
Мне нравится сохранять по крайней мере один Given
, When
и Then
в каждом Scenario
- не забывайте, что вы также можете использовать And
и But
(а не то, что они особенно актуальны к этому сценарию). Вы даже можете создать список стилей в виде пули с помощью *
.
Ответ 6
Вам не нужно, когда. Мне нравится думать, что ключевые слова Given/When/Then, такие как
Учитывая - это шаг подготовки, сделайте все, что вам нужно, чтобы выполнить тест
Когда - Это должно быть действие, которое проверит ваш тест.
Затем - это должно быть там, где вы проверяете свой тест на основе действия, выполняемого в шагах "Когда".
Как и ранее, они влияют только на порядок выполнения.