Über mich
Oliver „Oli“ Klee
#bonn
#workshop-teacher (seit 1999)
#extension-dev (seit 2005)
#unit-testing-guy (seit 2008)
#phpstan-guy
#best-practices-team
#game-cooking
#metal
Slide 3
Slide 3 text
Workshops mit mir
Extension-Entwicklung
Test-driven-Development
TYPO3-Extensions testen
QA-Automatisierung
Git & Composer
Refactoring
Slide 4
Slide 4 text
Unit-
Tests?
Slide 5
Slide 5 text
Manuelles Testen ist mühsam
Slide 6
Slide 6 text
Automatisierte
Tests sind schnell
Slide 7
Slide 7 text
Tests für den
TYPO3-Core
Slide 8
Slide 8 text
Unit-Tests
406 (144) Tests/s
Slide 9
Slide 9 text
Functional-Tests
8,13 (1,97) Tests/s
Slide 10
Slide 10 text
Acceptance-Tests
0,009 (0,003) Tests/s
Slide 11
Slide 11 text
Sicher sein, dass der
Code das Richtige tut
Slide 12
Slide 12 text
Verhindern, dass deine
Änderungen etwas anderes
kaputt machen
Slide 13
Slide 13 text
Verhindern,
dass andere Leute
deinen Code kaputtmachen
Slide 14
Slide 14 text
Auch bei komplexen
Projekten nichts
kaputt machen
Slide 15
Slide 15 text
Baue ein Sicherheitsnetz
fürs Refactoring
oder für
TYPO3-Updates
Slide 16
Slide 16 text
Verbessere
die Struktur
des Codes
Slide 17
Slide 17 text
Finde die Ursache von Bugs
Slide 18
Slide 18 text
Grün fühlt sich gut an!
Slide 19
Slide 19 text
Lasst uns
ein paar
Begriffe
klarstellen
Slide 20
Slide 20 text
Die zwei Programmier-Modi
sauber
hacky
Slide 21
Slide 21 text
Testsuite
Testcase
Test
Assertion
Test
Test
Testcase
Slide 22
Slide 22 text
Lebenszyklus eines Tests
new FooTest();
setUp();
/** @test */
lifeIsGood();
tearDown();
Slide 23
Slide 23 text
4 Test-Phasen
Setup (aufbauen)
setUp()
Code in der Testmethode
Exercise (ausführen) Methodenaufruf
Verify (prüfen) assert…()
Teardown (abbauen) tearDown()
Slide 24
Slide 24 text
Test-driven-Development
Test
schreiben
Code
schreiben
refactoren
Slide 25
Slide 25 text
Auswirkungen von TDD
höhere
Testabdeckung
minimaler
Code
erst denken,
dann coden
Tests testen,
was der Code
tun soll
(anstatt,
was er tut)
fokussierter
coden
sauberere
Code-Struktur
Slide 26
Slide 26 text
Test-Level
http://
fi
lipdefar.com/2015/06/tested-be-thy-name.html
Slide 27
Slide 27 text
Unit-Tests sind
klein und schnell
Slide 28
Slide 28 text
Integrationstests
testen das Zusammenspiel
von Komponenten
in TYPO3:
„Functional Tests“
Slide 29
Slide 29 text
Systemtests testen
das große Ganze
Slide 30
Slide 30 text
Test-Typen
Slide 31
Slide 31 text
Blackbox-Tests
testen das
nach außen Sichtbare
Slide 32
Slide 32 text
Whitebox-Tests wie genau es
innen funktioniert
testen,
Slide 33
Slide 33 text
Akzeptanztests
Selenium
Codeception
Slide 34
Slide 34 text
Anti-
Zombie-
Tests-
Slide 35
Slide 35 text
Regressionstests
Slide 36
Slide 36 text
Smoketests
Slide 37
Slide 37 text
Smoketests
Slide 38
Slide 38 text
Story-Tests für
Behavior-Driven Developmen
t
(BDD)
Behat
Codeception
Slide 39
Slide 39 text
Die Test-Pyramide
Unit
Functional/
Integration
Acceptance System
Photo by Eugene Tkachenko on Unsplash: https://unsplash.com/photos/TF47p5PHW18
Slide 40
Slide 40 text
Tests
benennen
Slide 41
Slide 41 text
Benutze aussagekräftige
Test-Namen
classCanBeInstantiated
setTitleSetsTitle
setSizeWithZeroThrowsException
hasTitleForEmptyTitleReturnsFalse
Benenne das
Verhalten.
Nenne die
Vorbedingungen.
Nenne die
Methode.
Benutze nicht
„works“ oder
„correctly“.
measureFrubbleWorksCorrectly