Семинар BDD: работа над ошибками

Решение №2

Поехали дальше, требование номер 2:

Два раза на одну встречу зарегистрироваться нельзя.

Как уже все понимают, сначала пишем спецификацию:

  • GIVEN уже зарегистрированный человек
  • WHEN он пытается зарегистрироваться ещё раз
  • THEN система выдаёт ошибку

Или то же самое с помощью Ruby и Rspec:

Или то же самое с помощью Java и JUnit:

Кстати, решение на JUnit имеет один серьёзный недостаток. Сможешь ли ты его найти, любознательный читатель? А исправить?

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

Примерно так:

На этом первые два требования считаем реализованными, а тебе, неугомонный читатель, мы предлагаем реализовать остальные 4 требования и стать BDD гуру:

  1. Имя и email обязательны.
  2. Два раза на одну встречу зарегистрироваться нельзя.
  3. Если участвовал раньше — одно подтверждение, а если впервые — то другое.
  4. После регистрации мыло попадает в общий список участников
  5. Если все места заняты, то человек добавляется в очередь
  6. Если кто-то отказывается, то регистрируется первый человек из очереди (и ему посылается подтверждение)

Присылайте свои решения на andrei [точко] solntsev [собако] gmail [точко] com, а вопросы и дополнения можно писать в комментариях. Приветствуются решения на разных языках и библиотеках, таких как Easyb, JBehave, RBehave, RSpec, jDave, Cucumber и др.

За BDДело!

4 комментария Семинар BDD: работа над ошибками

  1. Anton Tanasenko:

    Честно говоря в BDD немного разочаровался. Ожидал от этой аббревиатуры чего-то большего.. другой подход что-ли.
    А получились те же яйца только в профиль 🙂

    Спойлер: в юнит тесте надо первую и вторую регистрацию вынести в отдельные тесты (методы), иначе падение IllegalArgumentException при первой регистрации будет расцениваться как правильное.

    1. Наконец-таки спасибо за фидбак.
      На самом деле я специально рассказывал про БДД так, чтобы показалось похоже на ТДД — для того, чтобы девелоперам было проще понять. И мои примеры все были низкоуровневые, то есть почто что юнит-тесты. А так вообще в БДД есть больше, чем я показал, так что разочаровываться не надо, а надо попробовать и посмотреть примеры.

  2. Alexey:

    Какой недостаток решения на jUnit? Привязывание к IllegalArgumentException? Или название метода?

What do you think?

Note: Your email address will not be published

You may use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.