Slide Deck

advertisement
Behavior Driven Development
Using Visual Studio 2010 And
SpecFlow
Ivan Pavlović
MVP Visual C#, Scrum
Master
hive-studios.com
ivan.pavlovic@hivestudios.com
Twitter: @ipavlovi
Hive Studios
We Build Awesome Software Teams
What We Do?
How We Deliver?
•
•
•
•
•
•
• On Site Training
• Workshops
• Long term Coaching
Scrum Coaching
User Requirements
Team Empowerment
Solution Architecture
Software Quality
Build Automation
Agenda
• Back To Basics
– What is Requirement
• What is BDD?
– Filling the gap
• Language
– Gherchin
• Tools
– SpecFlow, Visual Studio
• Demos, common usage
– Unit & Acceptance testing
3
What Is Software Requirement
• Actor - Who is performing an action
• Action - What action?
• Result - Why, who benefits?
• Acceptance Criteria - How To Demo?
• Additional Details
• Priority
This is bare minimum!
4
Decomposition
• Break down requirement into manageable
chunks of work (1-2 days)
• Developer is the most important end user
of requirements in this stage
• And I’ll say it again:
Break down requirement into
manageable chunks of work
5
Behaviour Driven Development
• One of many agile development
techniques
• Specification driven by examples
• Clear communication between domain
experts, developers, testers and
customers
BDD is a second-generation, outside-in, pull-based,
multiple-stakeholder, multiple-scale, high-automation,
agile methodology. It describes a cycle of interactions
with well-defined outputs, resulting in the delivery of
working, tested software that matters. - Dan North
Gherkin
• Domain Specific Language
• Easy to understand by customers
• Simple sintax, few keywords
– Feature
– Background
– Scenario, Scenario Outline
– Given, When, Then
• Localized to 35+ languages
7
Gherkin (sr-Latn)
"sr-Latn":
name: Serbian (Latin)
native: Srpski (Latinica)
feature: Funkcionalnost|Mogućnost|Mogucnost|Osobina
background: Kontekst|Osnova|Pozadina
scenario: Scenario|Primer
scenario_outline: Struktura scenarija|Skica|Koncept
examples: Primeri|Scenariji
given: "*|Zadato|Zadate|Zatati"
when: "*|Kada|Kad"
then: "*|Onda"
and: "*|I"
but: "*|Ali"
8
Gherkin (sr-Cyrl)
"sr-Cyrl":
name: Serbian
native: Српски
feature: Функционалност|Могућност|Особина
background: Контекст|Основа|Позадина
scenario: Сценарио|Пример
scenario_outline: Структура сценарија|Скица|Концепт
examples: Примери|Сценарији
given: "*|Задато|Задате|Задати"
when: "*|Када|Кад"
then: "*|Онда"
and: "*|И"
but: "*|Али"
9
Real example
Feature: Serve coffee
In order to earn money
Customers should be able to
buy coffee at all times
Scenario: Buy last coffee
Given there are 1 coffees left in the machine
And I have deposited 1$
When I press the coffee button
Then I should be served a coffee
10
Tools
• SpecFlow – .NET, http://specflow.org
– Nunit, MSTest, MBUnit…
– Integrates into Visual Studio DevEnv
• Users are writing *.feature files
• Tool translates specs into *.feature.cs files
• Inspired by Cucumber – Ruby http://cukes.info/
11
Supported Test Types
•
•
•
•
•
•
Unit testing
Acceptance / Customer testing
Integration testing
Performance testing
Regression testing
...
12
Unit Test Example
DEMO 1 > HELLO WORLD
DEMO
Putting All The Pieces Together
1.
2.
3.
4.
5.
6.
User writes features & scenarios, clarify
SpecFlow generates one test per scenario
Developer runs test
Developer implements missing steps
Developer writes production code
Move to the next scenario
What Does SpecFlow Do?
…
7:
8:
9:
10:
Mapping Step Definitions
Given some precondition
And some other precondition
When some action by the actor
Then some testable outcome is achieved
[Given(@„some precondition")]
public void SomePrecondition() { … do something… }
[Given(@„some other precondition")]
public void SomePrecondition() { … do something… }
[When(@„some action by the actor")]
public void SomePrecondition() { … do something… }
[Then(@”some verifiable result”)]
Public void VerifyResult() { … do assert… }
16
…
Step Arguments - RegEx
7:
Given I have 5 apples
8:
9:
And I eat 2 of them
When someone asks how many apples I do have
10:
Then I should answer “3 apples”
[Given(@„I have (.*) apples")]
public void SomePrecondition(int numberOfApples) { … do something… }
[Given(@„ I eat (.*) of them")]
public void SomePrecondition(int numberOfEatenApples) { … do something… }
[When(@„ someone asks how many apples I do have")]
public void SomePrecondition() { … do something… }
[Then(@” I should answer \“(.*) apples\””)]
Public void VerifyResult(int expected) { … do assert of expected … }
17
DEMO
DEMO 2 > STEP ARGUMENTS
Scenario outline - refactoring
Scenario: TC1 Add two numbers
Given I have entered 1 into the calculator
And I have entered 2 into the calculator
When I press add
Then the result should be 3 on the screen
Scenario: TC2 Add two numbers
Given I have entered 2 into the calculator
And I have entered 2 into the calculator
When I press add
Then the result should be 4 on the screen
19
Scenario outline - refactoring
Scenario Outline: TC5
Given I have entered <x> into the calculator
And I have entered <y> into the calculator
When I press add
Then the result should be <result> on the screen
Scenarios: addition
| x | y | result|
| 1 | 2 | 3 |
| 2 | 2 | 4 |
| 3 | -3 | 0 |
20
DEMO
DEMO 3 > SCENARIO OUTLINE
Table Parameters
Scenario: Posting a valid entry
Given I am on the posting page
And I have filled out the form as follows
| Label
| Value
|
| Your name
| Jakob
|
| Your comment
| Das ist gut!
|
When I click the button labelled "Post"
Then I should be on the guestbook page
And the guestbook entries includes the following
| Name
| Comment
| Posted date
|
| Jakob
| Das ist gut! | (within last minute) |
[Given(@"I have filled out the form as follows")]
public void FillFormAsFollows(TechTalk.SpecFlow.Table table) {
foreach (var row in table.Rows) { ….. Do something … }
}
22
DEMO
DEMO 4 > TABLE
PARAMETERS
How to Implement Step
Definitions?
• It’s up to you – depends on what you are testing
1.
Public Interfaces / Components
• Unit or integration testings
2.
WebUI using browser automation
• WatiN, Selenium
3.
WebUI using Request/Respons
•
4.
Http Get/Post
Win UI using automation
•
White / Windows UI Automation
24
WPF UI Automation using White
DEMO 5 > ACCEPTANCE
TESTING
Key Points
• You can and you should automate tests now
– Win, WFP, Web, Silverlight, Service, Phone Apps
• Break down requirements until you can express
them in Gherkin, in your own language
• Threat tests as first-class citizens, refactor often
• Pay attention to the test setups and
dependencies
Resources
• Specflow
• http://specflow.org
• Gherkin
• https://github.com/cucumber/cucumber/wiki/Gherkin
• White
• http://white.codeplex.com/
• WatiN
• http://watiN.sourceforge.net
27
Thank You!
See you on Sinergija 11!
Ivan Pavlović
MVP Visual C#, Scrum
Master
hive-studios.com
ivan.pavlovic@hivestudios.com
Twitter: @ipavlovi
Download