Как писать рассказы/сценарии в BDD (Behavior Driven Design)
Я собираюсь использовать BDD (Behavior Driven Design) в первый раз и пытаюсь привыкнуть к этому другому способу приближения к проблеме.
Можете ли вы рассказать несколько историй/сценариев, которые вы могли бы написать, например, для простого приложения входа в систему, используя BDD?
Например, из того, что я прочитал, кажется, что это хорошо:
Когда пользователь вводит недопустимый идентификатор пользователя/пароль, тогда отображает ошибку сообщение.
В отличие от:
Подтвердите идентификатор и пароль, выполнив поиск соответствующей записи в базы данных.
Ответы
Ответ 1
У Дэна Севера есть отличный совет по написанию историй. "Дэн Норт - что в истории?"
Я также хотел бы взглянуть на некоторые из работ, выполняемых вокруг Cucumber, поскольку они потратили много времени на размышления о том, как писать эти истории понятным и исполняемым образом.
Ответ 2
Дэн Северная статья, о которой упоминал Кевин, велик.
Помните, однако, что есть "истории пользователей", которые на самом деле должны быть написаны или, по крайней мере, собраны у клиента/пользователей. Это скорее "Истории типа" Как, я хочу, так что ".
Тогда есть критерии приемлемости, которые определяют, как и когда пользовательская история будет считаться удовлетворительной. Это похоже на то, что вы написали в своем посте: "Когда 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));
}
Не обращайте внимание на синтаксис тестирования, вы можете видеть, что сам текст спецификации воплощен в имени и имени тестового класса. Кроме того, test/spec фактически тестирует поведение классов. Когда тесты, подобные этому, проходят для простых пользовательских историй, критерии приема были выполнены.
Ответ 3
Я нашел потрясающий разговор здесь https://skillsmatter.com/skillscasts/2446-bdd-as-its-meant-to-be-done
(осторожно, вам нужно создать учетную запись для просмотра видео)