Introduction to BDD with Cucumber for Java
-
Upload
seb-rose -
Category
Technology
-
view
4.382 -
download
1
Transcript of Introduction to BDD with Cucumber for Java
![Page 1: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/1.jpg)
Seb Rose [email protected]
@sebrose h0p://cucumber.io
An Introduc9on to Behaviour Driven Development
with Cucumber for Java
![Page 2: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/2.jpg)
@sebrose h)p://cucumber.io
Agenda
-‐ What is BDD? -‐ What is Cucumber? -‐ Demo Cucumber for Java -‐ Cucumber variants -‐ Pu@ng it all together
![Page 4: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/4.jpg)
@sebrose h)p://cucumber.io
BDD is a second-‐generaBon, outside-‐in, pull-‐based, mulBple-‐stakeholder, mulBple-‐scale, high-‐automaBon, agile methodology.
It describes a cycle of interacBons with well-‐defined outputs, resulBng in the delivery of working, tested soJware that ma)ers.
Dan Northh)p://skillsma)er.com/podcast/java-‐jee/how-‐to-‐sell-‐bdd-‐to-‐the-‐business
BDD defined
![Page 5: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/5.jpg)
@sebrose h)p://cucumber.io
The power of “should”
-‐ Diverts developers from their distaste for tesBng
-‐ Encourages people to ask “Should it really?”
![Page 6: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/6.jpg)
@sebrose h)p://cucumber.io
Deliberate discovery“… during an incepBon, when we are most ignorant about most aspects of the project,
the best use we can possibly make of the Bme available is to a)empt to idenBfy and reduce
our ignorance …”
Dan Northh)p://dannorth.net/2010/08/30/introducing-‐deliberate-‐discovery/
![Page 7: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/7.jpg)
@sebrose h)p://cucumber.io
Ubiquitous language“The pracBce of building up a common, rigorous language between developers and users”
MarBn Fowler
![Page 8: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/8.jpg)
@sebrose h)p://cucumber.io
The 3 Amigos
The one where...
User stories & acceptance criteria
Examples
Open quesBons
Domain learning
![Page 9: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/9.jpg)
@sebrose h)p://cucumber.io
Example mapping
Acceptance
Criterion
(Rule)
User Story
Example
Open
Question
Acceptance
Criterion
(Rule)
Acceptance
Criterion
(Rule)
Example
Example
Example Example
Example
![Page 10: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/10.jpg)
@sebrose h)p://cucumber.io
Important conversaBonshaving conversaBons is more important than capturing conversaBons is more important than
automa.ng conversaBons
Liz Keoghh)p://lizkeogh.com/2014/01/22/using-‐bdd-‐with-‐legacy-‐systems/
![Page 11: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/11.jpg)
@sebrose h)p://cucumber.io
Living documentaBona.k.a Executable specificaBon
Living documentaBon is a reliable and authoritaBve source of informaBon on system funcBonality, which anyone can easily access. It is as reliable as the code, but much easier to
read and understand. Gojko Adzic
h)p://specificaBonbyexample.com/key_ideas.html
![Page 12: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/12.jpg)
@sebrose h)p://cucumber.io
What BDD is not….
-‐ Using “Given/When/Then” -‐ The responsibility of testers -‐ An alternaBve to manual tesBng
![Page 13: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/13.jpg)
@sebrose h)p://cucumber.io
What is Cucumber?
Features
-Scenarios -‐Steps-Gherkin
Glue code
-Step definiBons-Ruby -Java -C# & others
ApplicaBon
![Page 14: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/14.jpg)
@sebrose h)p://cucumber.io
Feature: Team Scoring Teams start with zero score. Correct answer gets points depending on how difficult it is.
Scenario: New teams should not have scored yet Given I register a team Then my score is 0
Scenario: Correctly answering a question scores points Given I register a team When I submit a correct answer Then my score is 10
![Page 15: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/15.jpg)
@sebrose h)p://cucumber.io
Feature: Feature name Descrip8on of feature goes here
Scenario: Scenario name Descrip8on of scenario goes here
Given a certain context When something happens Then an outcome And something else But not this though
Scenario: Another scenario name ...
Gherkin fundamentals
![Page 16: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/16.jpg)
@sebrose h)p://cucumber.io
Given(/^I register a team$/) do # Glue code goes here end
Ruby
![Page 17: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/17.jpg)
@sebrose h)p://cucumber.io
import cucumber.api.java.en.*;
public class MyStepDefinitions {
@Given("^I register a team$") public void iRegisterATeam() throws Throwable { // Glue code goes here }}
Java
![Page 19: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/19.jpg)
@sebrose h)p://cucumber.io
Cucumber variants• Ruby • C# (Specflow) • Java (& other JVM languages) • Javascript • PHP • Python • C++
![Page 20: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/20.jpg)
@sebrose h)p://cucumber.io
Given/When/Then namespaces
Global namespace -‐ Given/When/Then interchangeable
Separate namespaces -‐ Given/When/Then disBnct -‐ And/But bind to preceding namespace -‐ [StepDefiniBon] for compaBbility
![Page 21: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/21.jpg)
@sebrose h)p://cucumber.io
Binding & test frameworks
Behind the scenes -‐ may need to specify paths -‐ select required plugin(s)
Some magic code generaBon -‐ NUnit by default -‐ configuraBon changes for others -‐ several output opBons
![Page 22: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/22.jpg)
@sebrose h)p://cucumber.io
Sharing data between steps
Varies by implementaBon -‐ Ruby, Javascript: World object -‐ Java: Dependency InjecBon
Context object(s) -‐ Injected -‐ Scenario -‐ Feature
![Page 23: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/23.jpg)
@sebrose h)p://cucumber.io
Hooks
Before & AJer Ruby: Around, AJerStep
Before & AJer BeforeStep & AJerStep BeforeFeature & AJerFeature BeforeTestRun & AJerTestRun BeforeScenarioBlock & AJerScenarioBlock
![Page 24: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/24.jpg)
@sebrose h)p://cucumber.io
Pu@ng it all together
SoJware development is hard.
Understanding what your methods and tools
are good for can make it easier.
![Page 26: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/26.jpg)
@sebrose h)p://cucumber.io
BDD is a second-‐generaBon, outside-‐in, pull-‐based, mulBple-‐stakeholder, mulBple-‐scale, high-‐automaBon, agile methodology.
It describes a cycle of interacBons with well-‐defined outputs, resulBng in the delivery of working, tested soJware that ma)ers.
Dan Northh)p://skillsma)er.com/podcast/java-‐jee/how-‐to-‐sell-‐bdd-‐to-‐the-‐business
BDD redefined
![Page 27: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/27.jpg)
@sebrose h)p://cucumber.io
h)ps://cucumber.pro/blog/2014/03/03/the-‐worlds-‐most-‐misunderstood-‐collaboraBon-‐tool.html
When you do BDD/SpecificaBon by Example and Outside-‐in, regression tests fall out at the other end. They are a by-‐product of those acBviBes. TesBng isn't the acBvity itself.
Cucumber is first a foremost a collaboraBon tool that aims to bring a common understanding to soJware teams -‐ across roles.
Aslak Hellesøy
It’s about collaboraBon
![Page 29: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/29.jpg)
@sebrose h)p://cucumber.ioh)p://claysnow.co.uk/architectural-‐alignment-‐and-‐test-‐induced-‐design-‐damage-‐fallacy/
Test = check + explore
![Page 31: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/31.jpg)
@sebrose h)p://cucumber.io
h)p://1.bp.blogspot.com/_YzKCMr-‐tcMM/TFLIGeqTJfI/AAAAAAAAARQ/AhNW62KX5EA/s1600/cartoon6.jpg
AutomaBon is development
![Page 32: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/32.jpg)
@sebrose h)p://cucumber.io
Understand designs
Features
-Scenarios -‐Steps-Gherkin
Glue code
-Step definiBons-Ruby -Java -C# & others ApplicaBon
Support code
![Page 33: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/33.jpg)
@sebrose h)p://cucumber.io
This page intenBonally blank.
<role> will write scenarios
![Page 35: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/35.jpg)
@sebrose h)p://cucumber.io
“I get paid for code that works, not for tests, so my philosophy is to test as li)le as possible to reach a given level of confidence ...
“I suspect this level of confidence is high compared to industry standards”
h)p://stackoverflow.com/quesBons/153234/how-‐deep-‐are-‐your-‐unit-‐tests/153565#153565
Kent Beck
It’s about confidence
![Page 38: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/38.jpg)
@sebrose h)p://cucumber.io
ImperaBve DeclaraBve
Avoid incidental details
Keep it focussed
![Page 40: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/40.jpg)
h)p://lizkeogh.com/2011/06/27/atdd-‐vs-‐bdd-‐and-‐a-‐po)ed-‐history-‐of-‐some-‐related-‐stuff/
What’s the difference
between TDD, ATDD, BDD and SbE?
They’re called
different things
![Page 41: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/41.jpg)
The best TDD pracBBoners...
•Work from the outside-‐in, i.e. test-‐first •Use examples to clarify their requirements •Develop and use a ubiquitous language
![Page 42: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/42.jpg)
The best BDD pracBBoners...
• Focus on value • Discover examples collabora7vely • Create living documenta7on
![Page 44: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/44.jpg)
@sebrose h)p://cucumber.io
Take aways
• BDD is about collaboraBon • You need a ubiquitous language • Cucumber can power conversaBon • and produce living documentaBon • but it’s no subsBtute for tesBng!
![Page 45: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/45.jpg)
Seb Rose Twi)er: @sebrose Blog: www.claysnow.co.uk E-‐mail: [email protected]
QuesBons?
Discou
nt cod
e at
pragpr
og.com
Java_O
ne_25%
_Off_C
uke
Valid
for 1
month
![Page 46: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/46.jpg)
@sebrose h)p://cucumber.io
h)ps://cemarking.net/wp-‐content/uploads/2014/01/User-‐Manual_featured.jpg
DocumentaBon
![Page 47: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/47.jpg)
Acceptance criteria
User Story
Examples
Feature: Team Scoring Teams start with zero score. Correct answer gets points depending on how difficult it is.
Scenario: Score starts at 0 Given I register a team Then my score is 0
Scenario: Correct easy answer scores 10 Given I register a team When I submit a correct easy answer Then my score is 10
Scenario: Correct hard answer scores 50 Given I register a team When I submit a correct hard answer Then my score is 50
![Page 48: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/48.jpg)
Step outcome!Passed
" No exception thrown
!Pending" Pending exception thrown
!Undefined" No matching step definition found
!Failed" Any other exception thrown
!Skipped" Steps that follow a Pending, Undefined or Failed step
!Duplicate" Step matches more than one step definition
@sebrose http://claysnow.co.uk
![Page 49: Introduction to BDD with Cucumber for Java](https://reader034.fdocuments.net/reader034/viewer/2022052116/5878d4a41a28ab917a8b5c8b/html5/thumbnails/49.jpg)
Scenario outcome
!Passed" All steps passed
!Failed" Any step failed
!Undefined" No failed steps" At least one undefined step
!Pending" No failed or undefined steps" At least one pending step
@sebrose http://claysnow.co.uk