31
@gil_zilberfeld @gil_zilberfeld Better code for better tests

Beter code for better tests

Embed Size (px)

Citation preview

Page 1: Beter code for better tests

@gil_zilberfeld@gil_zilberfeld

Better codefor better tests

Page 2: Beter code for better tests

@gil_zilberfeld

Hello!

I AM GIL ZILBERFELD

www.gilzilberfeld.com

www.everydayunittesting.com

@gil_zilberfeld

Page 3: Beter code for better tests

@gil_zilberfeld

First things first

◉ You need an IDE and a test framework

◉ You need the Gilded Rose code

◉ Make sure it compiles and you can write tests

that run

Page 4: Beter code for better tests

@gil_zilberfeld

Agenda

◉ Testing legacy code

◉ Making legacy code testable

◉ Testable code with TDD

Page 5: Beter code for better tests

@gil_zilberfeld@gil_zilberfeld

What makes code testable?

How would you ask a programmer to make it so?

Page 6: Beter code for better tests

@gil_zilberfeld

Exercise: The Gilded Rose

◉ Check out the code

◉ Create a test plan just from the code

◉ Do not share with other teams

Page 7: Beter code for better tests

@gil_zilberfeld

Exercise: Write tests

◉ According to your test plan

◉ Without changing the code

◉ What is hard?

◉ What is easy?

Page 8: Beter code for better tests

@gil_zilberfeld

Exercise: Test plan from requirements

◉ Add test cases according to the requirements

◉ Compare to the other test plan

◉ How is it different?

◉ How much impact does having the code and

requirement have?

Page 9: Beter code for better tests

@gil_zilberfeld@gil_zilberfeld

How does legacy code happen?

Page 10: Beter code for better tests

@gil_zilberfeld

The origin of legacy code

◉ Decisions taken too early

◉ Architecture is hard to change

◉ Centered around frameworks (and databases)

◉ Business logic is spread around

Page 11: Beter code for better tests

@gil_zilberfeld

Problems with legacy code

◉ Hard to find things

◉ Focus on technical aspects

◉ Not built for testing

Page 12: Beter code for better tests

@gil_zilberfeld@gil_zilberfeld

Refactoring for testability

Page 13: Beter code for better tests

@gil_zilberfeld

Better understanding

◉ Organize classes and files

◉ Rename classes

◉ Rename methods

◉ Rename files

Page 14: Beter code for better tests

@gil_zilberfeld

Better accessibility

◉ Change accessibility

◉ Introduce Field

◉ Add accessors

◉ Expose interfaces

◉ Introduce interface

◉ Add overload

Page 15: Beter code for better tests

@gil_zilberfeld

Reduce dependencies

◉ Move method

◉ Extract class

◉ Extract method

◉ Introduce Parameter

Page 16: Beter code for better tests

@gil_zilberfeld

Shared state issues

◉ Databases

◉ Files

◉ In-memory state

◉ Setup

◉ Clean up and error handling

Page 17: Beter code for better tests

@gil_zilberfeld

Exercise: Code modifications

◉ Small changes

◉ Make code clear and easy to test

◉ Make tests pass (obviously)

Page 18: Beter code for better tests

@gil_zilberfeld@gil_zilberfeld

Test driven development

To boldly go where no code has been before

Page 19: Beter code for better tests

@gil_zilberfeld

The TDD Cycle

Page 20: Beter code for better tests

@gil_zilberfeld

The three rules of TDD

◉ You may not write production code until you have

written a failing test

◉ You may not write more than one unit test than is

sufficient to fail, and not compiling is failing

◉ You may not write more production code than is

sufficient to pass the current test

Page 21: Beter code for better tests

@gil_zilberfeld

Let’s build a lightsaber!

Page 22: Beter code for better tests

@gil_zilberfeld

Exercise: Lightsaber

◉ Build a test plan for a light saber

Page 23: Beter code for better tests

@gil_zilberfeld@gil_zilberfeld

TDD Lightsaber

Page 24: Beter code for better tests

@gil_zilberfeld

Exercise

◉ Write test-first

◉ Better in pairs

◉ What is easy

◉ What is hard

◉ How is that different than the other exercises

Page 25: Beter code for better tests

@gil_zilberfeld

BENEFITS

Same tools

Better coverage

Less debugging

Better design

Think before your

code!

You can also split your content

ISSUES

Requires discipline

Works better for

greenfield projects

Takes time to get to great

results

The light side vs the dark side

Page 26: Beter code for better tests

@gil_zilberfeld

Summary

◉ Code has a lot if impact on how tests look like

◉ Understand the code

◉ Demand testability

◉ Collaborate for better code and better tests

Page 27: Beter code for better tests

@gil_zilberfeld@gil_zilberfeld

Resources

Page 30: Beter code for better tests

@gil_zilberfeld

Resources

◉ Code katas– CodeKatas.Org

◉ Cyber Dojo- Cyber-Dojo.org

Page 31: Beter code for better tests

@gil_zilberfeld

Thanks!

ANY QUESTIONS?

You can find me at:

@gil_zilberfeld

http://www.GilZilberfeld.com

http://www.EverydayUnitTesting.com

http://www.fastee.im