Перечислите все части набора в одном операторе Given-When-Then или разделите его на отдельные спецификации? - PullRequest
0 голосов
/ 17 августа 2010

Когда вы пишете спецификации Given When Then, предпочитаете ли вы перечислять элементы в наборе в операторе 1 When или создаете отдельные спецификации для каждого?,

GIVEN a book
WHEN category is "Fanatsy"
THEN Buy it.
GIVEN a book 
WHEN category is "Sci-Fi"
THEN Buy it.
GIVEN a book 
WHEN category is "Horror" 
THEN Buy it.

Кроме того, что вы делаете с остальной частью набора?Вы пишете спецификацию для каждой категории, которой нет в вашем подмножестве Buy-On-Sight, чтобы убедиться, что она не куплена?

1 Ответ

1 голос
/ 17 августа 2010

Лучше всего, если вы сможете их разделить, потому что так легче будет определить, какой из них окажется неудачным.Например, если в вашем тесте не получается купить «Sci-Fi», но успешно в «Фэнтези» и «Ужасе», как вы узнали бы, какой из них провалился?Сложная часть заключается в том, чтобы заставить ваш язык позволить вам делать это, не повторяя себя снова и снова.

Это не так проблематично для одномерных задач, как для многомерных задач, например:

GIVEN a bookstore
THAT has "Fantasy", "Sci-Fi", and "Horror" books
WHEN you only have enough money to buy one book
THEN buy "Fantasy"

и

GIVEN a bookstore
THAT has "Fantasy", "Sci-Fi", and "Horror" books
WHEN you have enough money to buy two books
THEN buy "Fantasy" and "Sci-Fi"

и

GIVEN a bookstore
THAT has "Fantasy", "Sci-Fi", and "Horror" books
WHEN you have enough money to buy two books
AND you already own a "Fantasy" book
THEN buy "Sci-Fi" and "Horror"

Мой голос в этих ситуациях по-прежнему состоит в том, что вы разделяете его следующим образом:

GIVEN a bookstore
THAT has "Fantasy", "Sci-Fi", and "Horror" books
WHEN you have enough money to buy two books
AND you already own a "Fantasy" book
THEN buy "Sci-Fi"
THEN buy "Horror"

Это означает, что у вас есть две спецификации в приведенном выше случае.Однако в статических языках, таких как C # и Java, я не нашел хорошего способа сделать это.Одна вещь, которая помогает, состоит в том, чтобы разбить ваш код аранжировки и утверждения на многократно используемые методы и выбирать из них, как если бы вы были блюда из линии кафетерия:

public virtual void Establish_context()
{
    Given_a_bookstore_that_has_Fantasy_Sci_fi_and_Horror_books();
    When_you_have_enough_money_to_buy_two_books();
    And_you_already_own_a_fantasy_book();
}

[Specification]
public void Then_buy_Sci_fi()
{
}

[Specification]
public void Then_buy_Horror()
{
}

Теперь вы можете создавать несколько подклассов, которые смешивают и соответствуют вашимУчитывая и когда.Это уменьшает боль, но все же подчеркивает недостаток статически типизированных языков, когда речь идет о написании действительно свободного кода в стиле BDD.

...