2017-02-20 25 views
2

Я новичок в Gherkin/ATDD/BDD. Я разработка следующего приемочного испытания:Насколько конкретным должен быть мой пример приемочного испытания?

Given a user is waiting for an operation to complete 
    And the operation is <percent>% complete 
When <threshold> seconds elapse 
Then a progress indicator should be displayed 
    And the progress indicator should display "<percent>%" 

Является ли это конкретные достаточно, или я должен изменить в данную статью, чтобы представить более конкретный пример (мышление в терминах SBE), например, ссылаясь на конкретную персону вместо просто «пользователь» или со ссылкой на точные «операции», которые выполняются (например: выборка списка клиентов)?

Спасибо, Тони

ответ

0

BDD

Поведение Driven Development все о разговорах между командой разработчиков и бизнеса. Файлы функций и сценарии внутри них должны всегда относиться к конкретной потребности бизнеса, функции или способности, что означает, что как бизнес, так и команда разработчиков полностью понятны между ними в точности, что обозначено.

В качестве примера:

Feature: Rewards for frequent flyers 
    As a frequent flyer 
    I should receive points to my account 
    So that I am more likely to book with BDD Airlines again in the future 

Scenario: I get flyer miles 
    Given I book a flight 
    And this flight earns 100 miles 
    When I land 
    Then my account should have 100 miles added to it 

Вопрос, делает это очертить всю проблему или есть нужно больше информации? Может ли команда разработчиков построить что-то с помощью этой беседы (как вы о SBE)?

Будет ли это лучше ?:

Feature: Rewards for frequent flyers 
    As a frequent flyer 
    I should receive points to my account 
    So that I am more likely to book with BDD Airlines again in the future 

Scenario: Passenger gets flyer miles 
    Given the account number 12341234 has a ticket for the "LGW-MAN" flight 
    And this route earns 100 miles 
    And the ticket is scanned at "LGW" 
    When the flight lands at "MAN" 
    Then the account 12341234 is rewarded 100 miles 

Scenario: Passenger missed their flight 
    Given the account number 12341234 has a ticket for the "LGW-MAN" flight 
    And this route earns 100 miles 
    And the ticket is not scanned at "LGW" 
    When the flight lands at "MAN" 
    Then the account 12341234 is not rewarded any miles 

Scenario: Passenger gets kicked off the plane 
    Given the account number 12341234 has a ticket for the "LGW-MAN" flight 
    And this route earns 100 miles 
    And the ticket is scanned at "LGW" 
    But the ticket is removed from the flight 
    When the flight lands at "MAN" 
    Then the account 12341234 is not rewarded any miles 

Это все о ясности, и, как правило, больше о том, как поведение системы описаны в отношении бизнеса.

Ваш пример

лично я бы не написать сценарий для целей тестирования индикатор прогресса, поскольку бизнес не должен быть заинтересован в реализации каких-либо компонентов, используемых (они не заботятся о панели загрузки, им просто нужно, чтобы информация фактически загружалась).

Это, по моему мнению, было бы лучше, как единичный тест.

+0

Привет, Кайл, ваш пример полезен, и я понимаю, что мой сценарий - это не деловая вещь. Как предположил @Lunivore, я, вероятно, сделаю этот тест более низкого уровня и конвертирую GWT в комментарии. Один вопрос о вашем примере: «И если билет не сканируется на« LGW », начните с' But' вместо 'And'? –

+0

Это может быть либо «И», либо «Но», оба имеют смысл в этом сценарии. После того, как вы это сказали, мой инстинкт говорит мне изменить его на «Но» исключительно потому, что он ссылается на отрицательное предположение, а не на положительное. Это все о предпочтении, когда дело доходит до использования 'And' &' But' –

0

Да, вы должны быть более конкретными. Если у вас есть только один тип пользователя или если этот тестовый пример применяется к каждой группе пользователей, «пользователь», вероятно, достаточно хорош для вашего теста. Тем не менее, я думаю, вы должны указать операцию, на которую нужно ждать, потому что TDD все об уверенности в безопасности вашего кода и как вы можете быть уверены, что он работает повсеместно, если вы его не тестировали для всех операций, которые могли бы вызвать задержка?

1

Прогресс-бары - это атетика.

Единственный реальный способ проверить эстетику - показать ее людям и посмотреть, что они думают. Тестирование A/B действительно полезно для этого. BDD не особенно хорошо подходит для эстетики, потому что эстетика на самом деле не касается желаемого поведения системы, а о желаемом поведении пользователей .

Мы по-прежнему учимся эффективно программировать людей. До тех пор тестируйте эстетику с людьми, а не с помощью скриптов.

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

На этом уровне вы можете просто положить "Given, When, Then" statements in comments, и это достаточно хорошо. Шаги уровня класса не используются повторно так же, как шаги на системном уровне, поэтому их использование в многократных абстракциях не так важно, как их легко изменить. Придерживайтесь J/N/WhateverUnit и высмеивайте остальные.

+0

Спасибо за понимание. Фактически это алгоритм, который я здесь, т. Е. Что индикатор прогресса отображается через x секунд, прошедший во время асинхронной операции в полете. Мне нравится подход к комментариям GWT из-за выразительности и ясности, которые грамматика привносит даже в технические тесты. «[BDD] ... речь идет не о желаемом поведении системы, а о желаемом поведении пользователей». Я немного смущен этим утверждением, поскольку это противоречит определению Дэна WRT «поведение» (система против пользователей): https://youtu.be/qWsnmx45734?t=51s –

+0

@TonyD Для BDD уровня BDD , пользователь - другой класс. Представьте, что вы этот класс. Выясните, как вы хотите использовать класс, который собираетесь писать. Можете ли вы придумать пример? Если это так, это BDD! Вы думаете о том, как поведение класса будет приносить пользу пользователям (другим классам), а не беспокоиться о том, как он будет вести себя внутренне. Мой комментарий «это не совсем о желаемом поведении системы» был о эстетике, а не о BDD, поэтому я буду редактировать, чтобы быть более четким. – Lunivore

+0

Ах. Да, это было мое неправильное толкование предмета «этого», которое меня отбрасывало. Ваше редактирование очищает его. Благодаря! –