Как писать истории / сценарии в BDD (Behavior Driven Design) - PullRequest
22 голосов
/ 28 мая 2009

Я собираюсь впервые использовать BDD (Behavior Driven Design) и пытаюсь привыкнуть к этому другому способу решения проблемы.

Можете ли вы привести несколько историй / сценариев, например, для простого приложения для входа в систему с использованием BDD?

Например, из того, что я прочитал, кажется, что это хорошо:

Когда пользователь вводит неверный ИД пользователя / пароль, отображается ошибка сообщение.

В отличие от:

Подтвердите идентификатор и пароль, выполнив поиск соответствующей записи в базы данных.

Ответы [ 3 ]

13 голосов
/ 31 мая 2009

Дэн Норт дает отличный совет по написанию историй. «Дэн Норт - что в истории?»

Я бы также взглянул на некоторые работы, которые ведутся вокруг Огурец , поскольку они потратили много времени на размышления о том, как написать эти истории понятным и выполнимым способом.

7 голосов
/ 01 июня 2009

Статья Дана Норта, о которой говорил Кевин, великолепна.

Помните, однако, что существуют «пользовательские истории», которые на самом деле должны быть написаны или, по крайней мере, получены от клиента / пользователей. Это больше истории типа «Как, я хочу, чтобы».

Затем существуют критерии приемлемости, которые определяют, как и когда пользовательская история будет признана удовлетворенной. Это похоже на то, что вы написали в своем посте: «Когда x, это должно быть y.»

Здесь много общего с тем, что я называю «системными историями» в моей системе управления проектами и «спецификациями» в моих тестах, которые определяют поведение, о котором пользователь может не знать, но описывают взаимодействие между вашими классами. Системная история: «Когда LoginHandler предоставлен логин и пароль, он должен проверить данные с помощью LoginValidator». Технические характеристики:

[TestFixture]
public class When_the_login_handler_is_given_a_login_and_password
{
   constant string login = "jdoe";
   constant string password = "password";
   static LoginValidator loginValidator;

   context c = () => loginValidator = an<ILoginValidator>;

   because b = () => sut.Validate(login, password);

   it should_validate_the_data_with_a_LoginValidator =
      () => loginValidator.was_told_to(x => x.DoValidation(login, password));
}

Не обращайте внимания на синтаксис тестирования, вы можете видеть, что сам текст спецификации воплощен в имени класса теста и имени метода. Кроме того, тест / спецификация фактически проверяет поведение классов. Когда подобные тесты проходят для простых пользовательских историй, критерии приемлемости были соблюдены.

0 голосов
/ 22 ноября 2015

Я нашел здесь потрясающий разговор https://skillsmatter.com/skillscasts/2446-bdd-as-its-meant-to-be-done (Внимание! Для просмотра видео вам необходимо создать учетную запись)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...