Slide 1

Slide 1 text

Writing readable tests Separating mechanics from data Alex Tercete @alextercete

Slide 2

Slide 2 text

https://www.flickr.com/photos/vdepizzol/8081618546

Slide 3

Slide 3 text

read- ability?

Slide 4

Slide 4 text

read- ability

Slide 5

Slide 5 text

understand- ability

Slide 6

Slide 6 text

The four elements of readability

Slide 7

Slide 7 text

https://www.flickr.com/photos/tychosnose/15416119182 Context WHERE

Slide 8

Slide 8 text

Reader’s Experience https://www.flickr.com/photos/theilr/5048464567 WHO

Slide 9

Slide 9 text

https://www.flickr.com/photos/thomasclaveirole/463202335 Structure HOW

Slide 10

Slide 10 text

Content https://www.flickr.com/photos/carinefel/13916816466 WHAT

Slide 11

Slide 11 text

Structure Mechanics Content Data

Slide 12

Slide 12 text

https://www.flickr.com/photos/emily3333000/16210254212

Slide 13

Slide 13 text

[Test] public void Add_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Add(), Is.EqualTo(8)); } [Test] public void Add_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Add(), Is.EqualTo(8)); }

Slide 14

Slide 14 text

[Test] public void Subtract_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Subtract(), Is.EqualTo(2)); } [Test] public void Add_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Add(), Is.EqualTo(8)); } [Test] public void Subtract_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Subtract(), Is.EqualTo(2)); }

Slide 15

Slide 15 text

Don’t Repeat Yourself

Slide 16

Slide 16 text

[SetUp] public void SetUp() { _calculator = new RpnCalculator(); _calculator.Push(5); _calculator.Push(3); } [Test] public void Add_two_numbers() { Assert.That(_calculator.Add(), Is.EqualTo(8)); } private RpnCalculator _calculator; [SetUp] public void SetUp() { _calculator = new RpnCalculator(); _calculator.Push(5); _calculator.Push(3); } [Test] public void Add_two_numbers() { Assert.That(_calculator.Add(), Is.EqualTo(8)); } [Test] public void Subtract_two_numbers() { Assert.That(_calculator.Subtract(), Is.EqualTo(2)); }

Slide 17

Slide 17 text

Repeat everything

Slide 18

Slide 18 text

[Test] public void Add_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Add(), Is.EqualTo(8)); } [Test] public void Subtract_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Subtract(), Is.EqualTo(2)); } [Test] public void Add_two_numbers() { var calculator = new RpnCalculator(); calculator.Push(5); calculator.Push(3); Assert.That(calculator.Add(), Is.EqualTo(8)); }

Slide 19

Slide 19 text

Separate mechanics from data

Slide 20

Slide 20 text

public void SetUp() { _calculator = new RpnCalculator(); } [Test] public void Add_two_numbers() { _calculator.Push(5); _calculator.Push(3); Assert.That(_calculator.Add(), Is.EqualTo(8)); } private RpnCalculator _calculator; [SetUp] public void SetUp() { _calculator = new RpnCalculator(); } [Test] public void Add_two_numbers() { _calculator.Push(5); _calculator.Push(3); Assert.That(_calculator.Add(), Is.EqualTo(8)); } [Test] public void Subtract_two_numbers() { _calculator.Push(5); _calculator.Push(3); Assert.That(_calculator.Subtract(), Is.EqualTo(2)); }

Slide 21

Slide 21 text

If it isn’t data, it must be mechanics https://www.flickr.com/photos/sarahreido/3120877348

Slide 22

Slide 22 text

[Test] public void Show_result_of_an_addition_on_the_display() { var stubCalculatorEngine = Substitute.For(); stubCalculatorEngine.Add(1, 2).Returns(3); var mockCalculatorDisplay = Substitute.For(); var calculator = new Calculator(stubCalculatorEngine, mockCalculatorDisplay); calculator.Type('1', '+', '2', '='); mockCalculatorDisplay.Received().Show("3"); }

Slide 23

Slide 23 text

[Test] public void Show_result_of_an_addition_on_the_display() { var stubCalculatorEngine = Substitute.For(); stubCalculatorEngine.Add(1, 2).Returns(3); var mockCalculatorDisplay = Substitute.For(); var calculator = new Calculator(stubCalculatorEngine, mockCalculatorDisplay); calculator.Type('1', '+', '2', '='); mockCalculatorDisplay.Received().Show("3"); }

Slide 24

Slide 24 text

[SetUp] public void SetUp() { _stubCalculatorEngine = Substitute.For(); _mockCalculatorDisplay = Substitute.For(); _calculator = new Calculator(_stubCalculatorEngine, _mockCalculatorDisplay); } [Test] public void Show_result_of_an_addition_on_the_display() { _stubCalculatorEngine.Add(1, 2).Returns(3); _calculator.Type('1', '+', '2', '='); _mockCalculatorDisplay.Received().Show("3"); }

Slide 25

Slide 25 text

Keep only what is essential to understand the test

Slide 26

Slide 26 text

Thanks! Alex Tercete @alextercete https://speakerdeck.com/alextercete/writing-readable-tests