Задано Когда Тогда Тестирование - НУЖНО ЛИ "Когда"? - PullRequest
17 голосов
/ 27 января 2012

Я внедряю некоторые тесты дыма на нашем веб-сайте.

Я использую формат Given / When / Then для существующих автоматических приемочных тестов / пользовательских историй.Но теперь я хочу сделать начальный тест дыма:

Given I'm on the homepage

Then I should see "Welcome To The Site"

Я что-то упустил?Это нормально, если у вас нет «Когда»?

Используемые инструменты: MVC3, SpecFlow, Nunit, Watin

Ответы [ 6 ]

20 голосов
/ 27 января 2012

Это полностью допустимый синтаксис, чтобы опускать любой из заданных, когда или затем (и даже смешивать их в любом порядке - 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()
{
     ...
14 голосов
/ 06 октября 2014

Я думаю, что вы действительно упускаете из виду здесь. Вам ВСЕГДА нужен 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, но вы должны! Детальная природа «Дано, когда» была выбрана, так как нам, людям, легче понимать и помогает нашим мыслительным процессам. Машине наплевать, что вы называете ступеньками. В таком случае вы должны приложить все усилия, чтобы всегда правильно использовать ключевые слова.

0 голосов
/ 05 июля 2017

Я склонен рассматривать данные как эквивалент традиционных предварительных условий.Когда в качестве эквивалента тестового действия.И затем, как эквивалент ожидаемого результата.

Поэтому, если нет предварительных условий, я бы не учел «Дано» и просто сосредоточился бы на «Когда и тогда»:позволяет вам использовать Given или When, но Visual Studio также позволит вам написать один класс длиной 1000 строк.Тот факт, что оба варианта возможны, не означает, что оба являются «правильными».

0 голосов
/ 09 июня 2016

Я бы сказал:

Given I have requested the home page
When the home page loads
Then I should see 'Welcome To The Site'
0 голосов
/ 25 мая 2012

Извиняюсь за воскресение потока ...

Я бы, наверное, пошел с:

Given there is a homepage
When I view the homepage
Then I should see "Welcome To The Site"

Я хотел бы оставить хотя бы один Given, When и Then в каждом Scenario - не забывайте, что вы также можете использовать And и But (не то, чтобы они особенно относились к этому сценарию).Вы можете даже создать список стилей с маркером с помощью *.

0 голосов
/ 30 января 2012

Вам не нужно когда. Мне нравится думать о заданных / когда / тогда ключевых словах типа

Дано - это подготовительный шаг, сделайте все, что вам нужно, чтобы выполнить тест Когда - это должно быть действие, которое будет проверять ваш тест. Затем - это должно быть место, где вы проверяете свой тест на основе действия, выполненного в шагах Когда.

Как и предполагалось ранее, они влияют только на порядок выполнения.

...