Seeding a Tree in a Gherkin
-
Upload
paul-rohorzka -
Category
Software
-
view
48 -
download
0
Transcript of Seeding a Tree in a Gherkin
![Page 1: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/1.jpg)
www.techtalk.at
Add PictureSetting up Complex Scenarios for Automated Tests
Paul RohorzkaSoftware Gardener
February 22nd, 2017
Seeding a Tree in a Gherkin @paulroho [email protected]
In einem Gurkerleinen Baum pflanzen
![Page 2: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/2.jpg)
2
What's Your Occupation?
Requirements Engineer?
Product Owner?
Developer?
Tester? QA?PM?
?
Testautomation Engineer?
Architect?
![Page 3: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/3.jpg)
3
What is
right?Make it right
Is it right?
Requirements Engineer
Product Owner
DeveloperTester
QA
PM
Testautomation Engineer
Architect
![Page 4: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/4.jpg)
4
Arrange
Act
Assert
Setup
Execute
Verify
What is right?
Make it right Is it right?
Given
When
ThenBy original uploader: Roke - Own work, CC BY-SA 3.0,
https://commons.wikimedia.org/w/index.php?curid=31996181
![Page 5: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/5.jpg)
5
Setup
Execute
Verify
Given
When
Then
Arrange
Act
Assert
Three Parts of anAutomated Test What is the
scenario?
What should trigger the behaviour?
Important question:
How are they related?
Can I actually observe what I
expected?
![Page 6: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/6.jpg)
6
Example: Unit Level
GetFormattedValuevalueformat
(return)
![Page 7: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/7.jpg)
7
Same With Acceptance/End-to-End?
INOUT
![Page 8: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/8.jpg)
8
Setup
Check
This talk
... and a little bit ...
It's Often Like This
![Page 9: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/9.jpg)
9
So Much Information!
![Page 10: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/10.jpg)
10
What Are My Options?
![Page 11: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/11.jpg)
11
Can feel clean (???)
Hidden Setup Incomplete Scenario Obscuring important parts Dependencies State?!
What if scaling out?
Classical Option 1: Common Test Data Set
Data B
Data C
Data A
Data Y
Data X
Data Z
Test 2
Test 3
Test 1
Test 98
Test 97
Test 99
Code, Database, File, ...
![Page 12: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/12.jpg)
12
Easy to get via refactoring
Gets quickly out of hand (overloads, optional parameters, ...)
Classical Option 2: Setup Method
![Page 13: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/13.jpg)
13
Can be easily extended (as domain grows) IDE can help (Intellisense)
Initial effort Needing multiple parts of complex structure
Classical Option 3: Builders
![Page 14: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/14.jpg)
14
Taking Builders Further
![Page 15: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/15.jpg)
15
No Matter What – Think of the Reader!
What would welike to read?
Write it down!
Do we like it?
Fix the syntax!
Do we still like it?
Make it work!
Imagine Engage Accom
plish
![Page 16: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/16.jpg)
16
Use whatever works best for the people
involved
https://flic.kr/p/47xDKh
![Page 17: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/17.jpg)
It's Showtime!
https://flic.kr/p/aN2zDe
![Page 18: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/18.jpg)
Act 1:Specifying a C# API
![Page 19: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/19.jpg)
Structure of an Organization
"Org Units"
![Page 20: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/20.jpg)
20
Specifying the InfoManager API
InfoManager
Client
C#
APISpecs
![Page 21: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/21.jpg)
21
The Obvious Approach:Unit Tests
![Page 22: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/22.jpg)
22
The Obvious Approach:Unit Tests
![Page 23: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/23.jpg)
23
• Where is the code under test?• How let the spec stand out from other low-level unit
tests?
• The client app's developer is the user of your API• The interface might be subject of a conversation• It defines the behaviour (i.e. more than the static
contract)
Give Gherkin a try!
Considerations
Probierein Gurkerl!
![Page 24: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/24.jpg)
24
Interlude: The Gherkin Language
Given
When
Then
![Page 25: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/25.jpg)
25
Connecting Gherkin With Code
"Step Bindings"
![Page 26: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/26.jpg)
27
Our Take – The Specs
![Page 27: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/27.jpg)
28
Our Take – One More
![Page 28: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/28.jpg)
29
• Bindings might get increasingly messy
• Refactoring can make the specs wrong
Some Downsides
![Page 29: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/29.jpg)
30
EffortBenefit
![Page 30: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/30.jpg)
Act 2:Building a PermissionChain
https://flic.kr/p/4SxU1r
![Page 31: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/31.jpg)
Introducing PERSY(PERmission SYstem)
• 6 chained objects• Each active/inactive• Ignore chain if one object is inactive
User Position
AD-Group
Groupm:n m:n
![Page 32: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/32.jpg)
33
Setup in 6 one-liners?
![Page 33: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/33.jpg)
34
Super-Entityto the rescue!
https://flic.kr/p/eXQbXV
![Page 34: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/34.jpg)
35
Super entity PermissionChain
User Position
AD-Group
Groupm:n m:n
PermissionChain
![Page 35: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/35.jpg)
36
PermissionChainBuilder in Action
![Page 36: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/36.jpg)
37
Stress your imagination!
![Page 37: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/37.jpg)
38
String Representation in Unit Testing Style
![Page 38: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/38.jpg)
39
Utilizing Gherkin Style
Syntax highlightingVariations:
![Page 39: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/39.jpg)
40
The CatchFragile!
Meta tests
Is it worth it? Yes, if this is part of
the core domain
1 out of 50+!
![Page 40: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/40.jpg)
41
A Meta Test
![Page 41: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/41.jpg)
42
BenefitEffort
![Page 42: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/42.jpg)
Act 3:Seeding A Tree
https://flic.kr/p/ooBmLt
![Page 43: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/43.jpg)
44
Testing a Feature Based on a Tree Structure
"Org Units"
![Page 44: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/44.jpg)
45
In the Database
![Page 45: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/45.jpg)
46
Obvious Approach: Domain Model API
![Page 46: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/46.jpg)
47
Next Attempt: Builders
![Page 47: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/47.jpg)
48
Going Meta: Meta-Builder
![Page 48: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/48.jpg)
49
Switching to Gherkin
![Page 49: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/49.jpg)
50
Away With the Parent References
![Page 50: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/50.jpg)
51
Away With That Many Columns
![Page 51: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/51.jpg)
52
Away With the Table
![Page 52: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/52.jpg)
53
Away With the Dots
![Page 53: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/53.jpg)
54
Some ASCII Art
![Page 54: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/54.jpg)
55
BenefitEffort
![Page 55: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/55.jpg)
56
Is It Worth The Trouble?
ReadabilityEase of Usage
Effort of Implementatio
n
Living Documentatio
n
maintainextend
discover
edit
![Page 56: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/56.jpg)
57
Build
Reflect
Decide
Hint: Iterate!
Don't try to build too much magic up front!
![Page 57: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/57.jpg)
58
Put FirstWhat You Would Love to See
Not What You Have. By Mstyslav Chernov - Self-photographed, http://mstyslav-chernov.com/, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=28541140
![Page 58: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/58.jpg)
59
Thank You!
Your Thoughts?
![Page 59: Seeding a Tree in a Gherkin](https://reader035.fdocument.pub/reader035/viewer/2022062903/58ed31e01a28ab7a1d8b45cf/html5/thumbnails/59.jpg)
60