Эволюция к Behavior Driven Development на примере популярного фреймворка JBehave
1. Эволюция к
Behavior Driven Development
на примере популярного фреймворка
JBehave
Александр Дергачев
10 February 2012
2. Содержание
• Концепция Behavior Driven Development:
– Test Driven Development
– Domain Driven Design
– User Stories
• Использование BDD c JBehave:
– Написание и реализация сценариев на Java
– Интеграция с Maven и различными IDE
– Конфигурация Integration тестов
– Генерация отчетов в HTML
2 www.ExigenServices.com
3. Концепция Test Driven Development
1) Cначала
пишется тест
3) Рефакторинг
2) Код, чтобы
прошел тест
3 www.ExigenServices.com
4. Test Driven Development на практике
• Средства предварительной отладки и проверки
функциональности повышают скорость разработки и качество
кода
• Некоторые разработчики не могут преодолеть концептуальную
пропасть, с которой у них ассоциируется слово тестирование
• Опыт показывает, что невозможно проверить то, что еще не
существует
4 www.ExigenServices.com
5. Функциональность первична
Простой пример:
• Что такое online P2P перевод денег?
• Клиент должен иметь возможность перевести указанную сумму
со своего счета на другой.
Возможный сценарий:
• Что если у клиента не достаточно средств?
• Система должна выдать сообщение об ошибки «…» и баланс не
должен измениться.
5 www.ExigenServices.com
6. Знакомство с Behavior Driven Development
«BDD может легко и эффективно превратить требования в
написанный, протестированный, готовый к релизу код, в то время
как требования достаточно четкие, чтобы каждый понимал что
происходит.»
Метод разработки основанный на User Stories, Test Driven
Development, Domain Driven Design и Continuous Integration.
6 www.ExigenServices.com
8. Концепция Behavior Driven Development
1) Рассматриваем
один сценарии
Given user has an
2) Описываем available balance of $10
N-ый шаг
3) Код шага
не успешен user.
setBalance(value);
5)
Рефакторинг
4) Код шага
успешен
7) Рефакторинг
6) Переходим
jbehave,
к след. шагу
easyb
8 www.ExigenServices.com
9. Использование BDD c
• JBehave – это популярный Behavior Driven Development
фреймворк для платформы Java, основанная на принципах xUnit
• Автоматизирует тестирование User Stories:
– Пошаговый разбор сценариев в разных форматах
– Синхронное и асинхронное выполнение сценариев
• Расширяет Continuous Integration
• Предоставляет подробные отчеты в HTML
9 www.ExigenServices.com
10. Написание сценариев для
Scenario: Payer doesn't have enough funds
Given Alex is logged into account page
And has an available balance of $90
When he enters in the amount field $90.01
And enters in the recipient field ad@java.com
And clicks on the submit button in the form
Then Alex should see error message «…»
And available balance remains unchanged
10 www.ExigenServices.com
11. Реализация сценариев с
@Given("has an available balance of $amount")
public void aBalance(String amount) {
user.setBalance(amount);
}
@When("clicks on the $name button in the form")
public void clickButton(String name) {
selenium.click(name);
}
@Then("$user should see error message $text")
public void errorMsg(String user, String text) {
Assert.fail("not implemented");
}
11 www.ExigenServices.com
12. Конфигурация
public class P2PSendMoney extends JUnitStory {
@Given("...") { ... }
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
.useStoryReporterBuilder(
new StoryReporterBuilder()
.withFormats(CONSOLE, HTML, XML));
}
}
}
12 www.ExigenServices.com
17. Генерация отчетов в
Stories Scenarios Steps … Duration View
Name Total Successful Failed Total … (hh:mm:ss.SSS)
stats
… 6 2 4 25 (00:00:05.132) html
xml
P2P stats
Send 5 5 0 35 (00:00:15.262) html
Money xml
stats
Total 11 7 4 60 (00:00:20.394) html
xml
17 www.ExigenServices.com
18. Генерация отчетов в
P2P Send Money
com/forceassociates/onpay_webtester/stories/P2PSendMoney.story.txt
Scenario: Person registers for OnPay Examples
<…>
Scenario: Payer doesn’t have enough funds Examples
Given <name> is logged into account page name balance amount mail
And has an available balance of <balance> Alex $90 $90.01 ad@...
When he enters in the amount field <amount> Bob $0 $10 hp@...
<…> Jack $0.01 $0.02 go@...
18 www.ExigenServices.com
19. Ресурсы
• В поисках качества кода: Знакомство с Behavior Driven
Development, Эндрю Гловер, IBM Developer Works
• Behavior Driven Development, Gorden Force, The San Francisco Java
User Group
• JBehave Official Website, http://jbehave.org/index.html
• What’s in a Story?, Dan North, http://dannorth.net/whats-in-a-story
• Behavior Driven Development Official Website,
http://behaviour-driven.org
19 www.ExigenServices.com
20. Спасибо за внимание!
Given that you have heard the presentation
And discovered that BDD is really fun
When you are thinking about testing strategies
Then you should give BDD a chance!
Questions?
mailto: Aleksander.Dergachev@exigenservices.com
20 www.ExigenServices.com