59
www.techtalk .at Add Picture Setting up Complex Scenarios for Automated Tests Paul Rohorzka Software Gardener February 22nd, 2017 Seeding a Tree in a Gherkin @paulroho [email protected] In einem Gurkerl einen Baum pfla nzen

Seeding a Tree in a Gherkin

Embed Size (px)

Citation preview

Page 1: Seeding a Tree in a Gherkin

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

2

What's Your Occupation?

Requirements Engineer?

Product Owner?

Developer?

Tester? QA?PM?

?

Testautomation Engineer?

Architect?

Page 3: Seeding a Tree in a Gherkin

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

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

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

6

Example: Unit Level

GetFormattedValuevalueformat

(return)

Page 7: Seeding a Tree in a Gherkin

7

Same With Acceptance/End-to-End?

INOUT

Page 8: Seeding a Tree in a Gherkin

8

Setup

Check

This talk

... and a little bit ...

It's Often Like This

Page 9: Seeding a Tree in a Gherkin

9

So Much Information!

Page 10: Seeding a Tree in a Gherkin

10

What Are My Options?

Page 11: Seeding a Tree in a Gherkin

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

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

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

14

Taking Builders Further

Page 15: Seeding a Tree in a Gherkin

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

16

Use whatever works best for the people

involved

https://flic.kr/p/47xDKh

Page 17: Seeding a Tree in a Gherkin

It's Showtime!

https://flic.kr/p/aN2zDe

Page 18: Seeding a Tree in a Gherkin

Act 1:Specifying a C# API

Page 19: Seeding a Tree in a Gherkin

Structure of an Organization

"Org Units"

Page 20: Seeding a Tree in a Gherkin

20

Specifying the InfoManager API

InfoManager

Client

C#

APISpecs

Page 21: Seeding a Tree in a Gherkin

21

The Obvious Approach:Unit Tests

Page 22: Seeding a Tree in a Gherkin

22

The Obvious Approach:Unit Tests

Page 23: Seeding a Tree in a Gherkin

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

24

Interlude: The Gherkin Language

Given

When

Then

Page 25: Seeding a Tree in a Gherkin

25

Connecting Gherkin With Code

"Step Bindings"

Page 26: Seeding a Tree in a Gherkin

27

Our Take – The Specs

Page 27: Seeding a Tree in a Gherkin

28

Our Take – One More

Page 28: Seeding a Tree in a Gherkin

29

• Bindings might get increasingly messy

• Refactoring can make the specs wrong

Some Downsides

Page 29: Seeding a Tree in a Gherkin

30

EffortBenefit

Page 30: Seeding a Tree in a Gherkin

Act 2:Building a PermissionChain

https://flic.kr/p/4SxU1r

Page 31: Seeding a Tree in a Gherkin

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

33

Setup in 6 one-liners?

Page 33: Seeding a Tree in a Gherkin

34

Super-Entityto the rescue!

https://flic.kr/p/eXQbXV

Page 34: Seeding a Tree in a Gherkin

35

Super entity PermissionChain

User Position

AD-Group

Groupm:n m:n

PermissionChain

Page 35: Seeding a Tree in a Gherkin

36

PermissionChainBuilder in Action

Page 36: Seeding a Tree in a Gherkin

37

Stress your imagination!

Page 37: Seeding a Tree in a Gherkin

38

String Representation in Unit Testing Style

Page 38: Seeding a Tree in a Gherkin

39

Utilizing Gherkin Style

Syntax highlightingVariations:

Page 39: Seeding a Tree in a Gherkin

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

41

A Meta Test

Page 41: Seeding a Tree in a Gherkin

42

BenefitEffort

Page 42: Seeding a Tree in a Gherkin

Act 3:Seeding A Tree

https://flic.kr/p/ooBmLt

Page 43: Seeding a Tree in a Gherkin

44

Testing a Feature Based on a Tree Structure

"Org Units"

Page 44: Seeding a Tree in a Gherkin

45

In the Database

Page 45: Seeding a Tree in a Gherkin

46

Obvious Approach: Domain Model API

Page 46: Seeding a Tree in a Gherkin

47

Next Attempt: Builders

Page 47: Seeding a Tree in a Gherkin

48

Going Meta: Meta-Builder

Page 48: Seeding a Tree in a Gherkin

49

Switching to Gherkin

Page 49: Seeding a Tree in a Gherkin

50

Away With the Parent References

Page 50: Seeding a Tree in a Gherkin

51

Away With That Many Columns

Page 51: Seeding a Tree in a Gherkin

52

Away With the Table

Page 52: Seeding a Tree in a Gherkin

53

Away With the Dots

Page 53: Seeding a Tree in a Gherkin

54

Some ASCII Art

Page 54: Seeding a Tree in a Gherkin

55

BenefitEffort

Page 55: Seeding a Tree in a Gherkin

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

57

Build

Reflect

Decide

Hint: Iterate!

Don't try to build too much magic up front!

Page 57: Seeding a Tree in a Gherkin

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

59

Thank You!

Your Thoughts?

Page 59: Seeding a Tree in a Gherkin

60