Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

21
Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Transcript of Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Page 1: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Clean Code

Und was ist mit den Tests?

Clean Code Days 2013, Robin Danzinger

Page 2: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Und was ist mit den Tests?

Bevor ich mich um sauberen Produktivcode bemühe, muss ich

sauberen Testcode haben

! ?

Page 3: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Warum Tests?

Page 4: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Warum Tests?

Legacy Code Clean Code

Test Code

Michael Feathers: „To me, legacy code is simple code without tests.“

Page 5: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Mehr Tests?

Legacy Code Clean Code

Test Code Clean Test

Code

Test Test Code

Michael Feathers: „To me, legacy code is simple code without tests.“

Page 6: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Noch mehr Tests?

Legacy Code Clean Code

Test Code Clean Test

Code

Test Test Code

...

Clean Test Test Code

Michael Feathers: „To me, legacy code is simple code without tests.“

Page 7: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Anforderungen an Testcode

Selbsterklärend Simple Logik Einfach lesbar Tests als Dokumentation Kurz Methodennamen als Querprüfung DAMP over DRY

Page 8: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

BEISPIELE

Page 9: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Beispiele

Methodennamen

3 Zeiler

AAA / GWT

Builder Pattern, Fluent API

Sprechende Hilfsmethoden

Eindeutige Variablennamen

Nur eine Assertion

Page 10: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Alles testen?

Page 11: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

geek

& p

oke

Page 12: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Schwieriges Mocken

doSomething() {

getDep1().getDep2().do()

}

var dep1 = new MockA()

Dep1.setDep2(new MockB());

var cut = new CuT(dep1);

CuT DEP 1 DEP 2

Page 13: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Schwieriges Mocken

Law of Demeter

Page 14: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Framework Frustration

Framework

CuT

Page 15: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Framework Frustration

Separation of Concerns

Page 16: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Schwierige Testinstanzierung

CuT

DEP 1

DEP 2

var dep1 = New Dep1();

var dep2 = New Dep2();

dep1.setDep(dep2);

dep2.setDep(dep1);

var cut = New CuT(dep1, dep2);

Page 17: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Schwierige Testinstanzierung

Entkoppeln

Page 18: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Private Methoden

CuT

Private Methode

Private Methode

fuehreGeschaeftsvorfallAus() {

tueDies();

tueDas();

druckeStatistik();

}

Page 19: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Wenn es schwer ist, den Code zu testen…

o Private Methoden

Single Responsibility Principle

Page 20: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Fazit

Michael Feathers: „To me, legacy code is simple code without tests“

To me, clean code is simple testable code

Page 21: Clean Code€¦ · Clean Code Und was ist mit den Tests? Clean Code Days 2013, Robin Danzinger

Resources

• http://geek-and-poke.com

• http://commons.wikimedia.org/wiki/File:Hercules_slaying_the_Hydra.jpg

• http://vimeo.com/15007792

• http://blog.socosomi.com/dont-be-afraid-of-long-test-names/

• http://blog.stevensanderson.com/2009/08/24/writing-great-unit-tests-best-and-worst-practises/