SlideShare ist ein Scribd-Unternehmen logo
PhpUnit
Robert Deutz, Joomladay Germany 2013
Unit Tests in Joomla!
Einführung und Grundlegendes
Montag, 16. September 13
Die unvermeidlichen ..
Montag, 16. September 13
2002
Selbstständig
2005
Mamboday
2006
Joomladay
2008 2010
1.5
Beez
OSM
2012
2013
JWC
Robert Deutz
Montag, 16. September 13
• Alle Entwicklungen unter einem Dach
• Zentrale Anlaufstelle
• Updates
Montag, 16. September 13
Ziel?
Montag, 16. September 13
Interesse wecken!
Montag, 16. September 13
aber wie ......
Montag, 16. September 13
.. anfangen
Montag, 16. September 13
- einfach -
Montag, 16. September 13
DRINKS
coins
Beer Water
Montag, 16. September 13
Black Box
Montag, 16. September 13
Erwartungen
Montag, 16. September 13
Behauptungen
- assertion -
Montag, 16. September 13
Back to Drinks
Montag, 16. September 13
DRINKS
coins
Beer Water
Erwartung:
Wenn ich Geld einwerfe und
auf die Taste „Beer“ drücke, dann
kommt unten ein Bier raus
Test:
Geld einwerfen und auf die
Taste Beer drücken.
Ergebnis:
Bier
Montag, 16. September 13
DEMO
1
Montag, 16. September 13
Aha
• Code Coverage zeigt welche Programmteile
durchlaufen wurden
• Obwohl alles durchlaufen wurde, bedeutet das nicht
das alles getestet wurde
• Nicht vergessen die Ursprungsklasse einzubinden
Montag, 16. September 13
Assertions
• assert[Not]Equals()
• assert[Not]False()
• assert[Not]Null()
• assertArrayHasKey()
• assert[Not]Empty()
Montag, 16. September 13
DEMO
2
Montag, 16. September 13
Aha
• Jeder Test läuft isoliert mit, setup() und teardown()
initialisieren wir die Testumgebung
• Wie haben eindeutig zu wenig Bier ;-)
Montag, 16. September 13
DEMO
3
Montag, 16. September 13
Aha
• Jeder Test der einen Dataprovider verwendet läuft
AUCH isoliert, setup() und teardown() werden für jedes
Datum aufgerufen und initialisieren die Testumgebung
• Das Problem mit dem zu wenig Bier ist gelöst ;-)
Montag, 16. September 13
Wie schreibe ich
Tests?
Montag, 16. September 13
Falsche Frage
oder
Falscher Zeitpunkt
Montag, 16. September 13
„Schlechter“ Code ist
schwer zu testen
Montag, 16. September 13
Perfekt:
Wenn Tests vor dem
eigentlichen Code
geschrieben werden
Montag, 16. September 13
Reality Check!
Montag, 16. September 13
Also, was beachten?
Montag, 16. September 13
Programmiere
einfach
Montag, 16. September 13
einfach?
• Kleine Funktionen mit EINER Aufgabe
• Klassen die eine Problemstellung lösen
• Probleme und Aufgaben soweit unterteilen wir irgend
möglich
• Überschaubarer Programmcode.
Montag, 16. September 13
Cyclomatic
Complexity
Montag, 16. September 13
Anzahl der
Entscheidungspunkte
in einer Routine
Montag, 16. September 13
N-Path Complexity
Montag, 16. September 13
Anzahl der eindeutigen
Pfade durch eine
Routine
Montag, 16. September 13
DEMO
4
Montag, 16. September 13
Zusammenhang:
Cyclomatic und N-Path
Complexity
NP = 2 ^ (CC-1)
Montag, 16. September 13
<16 Geringe Komplexität
17-128 Mittlere Komplexität
129-1024 Hohe Komplexität
>1025 Sehr hohe Komplexität
N-Path Complexity
Montag, 16. September 13
N-Path ist:
Die minimale Anzahl der
Tests die nötig sind eine
Routine komplett zu
testen
Montag, 16. September 13
Back to Drinks
Montag, 16. September 13
DEMO
5+6
Montag, 16. September 13
Aha
• Durch die Tests ist aufgefallen, das wir die Schnittstelle
geändert haben.
• Mit „Unit Tests“ testen wir die öffentlichen Schnittstellen
einer Klasse
Montag, 16. September 13
Ups
• Wir testen nun auch die Klasse „CoinChecker“, damit ist
der Erfolg unserer Tests von einer anderen Klasse
abhängig
• Unsere Klasse hat neudeutsch eine Dependency und
kann nicht mehr isoliert getestet werden.
• Die Klasse ist auch noch hardcoded in unserer Klasse
eingebunden
Montag, 16. September 13
BÖSE
	 public function processInsertedCoins($coin)
	 {
	 	 $credits = CoinChecker::CalculateCredits($coin);
	 	 $this->countAcceptedCoins($credits);
	 }
Montag, 16. September 13
DEMO
7+8
Montag, 16. September 13
Aha
• Abhängigkeiten sollten vermieden werden.
• Sind andere Klassen notwendig können diese ggf.
durch Mock-Klassen ersetzt werden
• Mock Objekte können auch onTheFly erzeugt werden.
• Am besten so programmieren, als ob es statische
Klassenaufrufe nicht geben würde.
Montag, 16. September 13
Joomla
Montag, 16. September 13
DANKE
Montag, 16. September 13
* https://github.com/sebastianbergmann/phpunit/
* http://blog.ircmaxell.com/2013/05/development-by-numbers-slides.html
Code examples die in diesem Vortrag verwendet worden sind:
* https://github.com/rdeutz/talk-jd13de-unittests
Links
Montag, 16. September 13

Weitere ähnliche Inhalte

Andere mochten auch

Proyecto de tesis1 sesiones 1y2
Proyecto de tesis1 sesiones 1y2Proyecto de tesis1 sesiones 1y2
Proyecto de tesis1 sesiones 1y2
Frank Pool
 
El arca de noé
El arca de noéEl arca de noé
El arca de noé
USET
 
Soja pengue
Soja pengueSoja pengue
Soja pengue
Zariella
 
Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...
Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...
Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...
Oeko-Institut
 
Alfombrando la geometria
Alfombrando la geometriaAlfombrando la geometria
Alfombrando la geometria
USET
 
Yambo B10 French IV Project
Yambo B10   French IV ProjectYambo B10   French IV Project
Yambo B10 French IV Project
Yambo B.
 
Personal 2010 Präsentation
Personal 2010 PräsentationPersonal 2010 Präsentation
Personal 2010 PräsentationXING AG
 
La Boîte à Images - Dossier de Presse
La Boîte à Images - Dossier de PresseLa Boîte à Images - Dossier de Presse
La Boîte à Images - Dossier de Presse
Christophe Delire
 
Ein Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbar
Ein Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbarEin Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbar
Ein Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbar
Oeko-Institut
 
Bureau virtuel
Bureau virtuelBureau virtuel
Bureau virtuelmariejura
 
Los ultimos jueves en la ciudad del sol. Las Carmelitas
Los ultimos jueves en la ciudad del sol. Las CarmelitasLos ultimos jueves en la ciudad del sol. Las Carmelitas
Los ultimos jueves en la ciudad del sol. Las Carmelitas
Punto Vuela Guadalinfo Sanlucar la Mayor
 
Para la fortaleza de la juventud
Para la fortaleza de la juventudPara la fortaleza de la juventud
Para la fortaleza de la juventud
USET
 
Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...
Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...
Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...
Oeko-Institut
 
Der perfekte Baukasten
Der perfekte BaukastenDer perfekte Baukasten
Der perfekte Baukasten
Martin Nerurkar
 
Chemex1 msds s
Chemex1 msds sChemex1 msds s
Chemex1 msds s
JMD
 
Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...
Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...
Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...
Oeko-Institut
 
Exposición sirtod2012
Exposición sirtod2012Exposición sirtod2012
Hagia Sofia, Isidoros
Hagia Sofia, IsidorosHagia Sofia, Isidoros
Hagia Sofia, Isidoros
YPEPTH
 

Andere mochten auch (20)

Proyecto de tesis1 sesiones 1y2
Proyecto de tesis1 sesiones 1y2Proyecto de tesis1 sesiones 1y2
Proyecto de tesis1 sesiones 1y2
 
El arca de noé
El arca de noéEl arca de noé
El arca de noé
 
Soja pengue
Soja pengueSoja pengue
Soja pengue
 
Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...
Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...
Wege aus der Krise. Optionen für die Reparatur und Weiterentwicklung des EU-E...
 
Alfombrando la geometria
Alfombrando la geometriaAlfombrando la geometria
Alfombrando la geometria
 
Yambo B10 French IV Project
Yambo B10   French IV ProjectYambo B10   French IV Project
Yambo B10 French IV Project
 
Personal 2010 Präsentation
Personal 2010 PräsentationPersonal 2010 Präsentation
Personal 2010 Präsentation
 
La Boîte à Images - Dossier de Presse
La Boîte à Images - Dossier de PresseLa Boîte à Images - Dossier de Presse
La Boîte à Images - Dossier de Presse
 
Albert camus (1)
Albert camus (1)Albert camus (1)
Albert camus (1)
 
Ein Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbar
Ein Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbarEin Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbar
Ein Jahr nach Fukushima: Die Stromversorgung ohne Kernenergie ist machbar
 
Bureau virtuel
Bureau virtuelBureau virtuel
Bureau virtuel
 
Los ultimos jueves en la ciudad del sol. Las Carmelitas
Los ultimos jueves en la ciudad del sol. Las CarmelitasLos ultimos jueves en la ciudad del sol. Las Carmelitas
Los ultimos jueves en la ciudad del sol. Las Carmelitas
 
Para la fortaleza de la juventud
Para la fortaleza de la juventudPara la fortaleza de la juventud
Para la fortaleza de la juventud
 
Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...
Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...
Den europäischen Emissionshandel flankieren: Chance und Grenzen unilateraler ...
 
Der perfekte Baukasten
Der perfekte BaukastenDer perfekte Baukasten
Der perfekte Baukasten
 
Chemex1 msds s
Chemex1 msds sChemex1 msds s
Chemex1 msds s
 
Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...
Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...
Erneuerbare-Energien-Gesetz 3.0: Konzept einer strukturellen EEG-Reform auf d...
 
Exposición sirtod2012
Exposición sirtod2012Exposición sirtod2012
Exposición sirtod2012
 
Bugs bunny
Bugs bunnyBugs bunny
Bugs bunny
 
Hagia Sofia, Isidoros
Hagia Sofia, IsidorosHagia Sofia, Isidoros
Hagia Sofia, Isidoros
 

Mehr von Robert Deutz

Setting up your development environment
Setting up your development environmentSetting up your development environment
Setting up your development environment
Robert Deutz
 
Joomlaplatform en
Joomlaplatform enJoomlaplatform en
Joomlaplatform en
Robert Deutz
 
Joomlaplatform deutsch
Joomlaplatform deutschJoomlaplatform deutsch
Joomlaplatform deutsch
Robert Deutz
 
Development tools
Development toolsDevelopment tools
Development tools
Robert Deutz
 
Status des Projektes Joomla!Day Germany 2011
Status des Projektes Joomla!Day Germany 2011Status des Projektes Joomla!Day Germany 2011
Status des Projektes Joomla!Day Germany 2011
Robert Deutz
 
1.6 - Stand der Entwicklung
1.6 - Stand der Entwicklung1.6 - Stand der Entwicklung
1.6 - Stand der Entwicklung
Robert Deutz
 

Mehr von Robert Deutz (6)

Setting up your development environment
Setting up your development environmentSetting up your development environment
Setting up your development environment
 
Joomlaplatform en
Joomlaplatform enJoomlaplatform en
Joomlaplatform en
 
Joomlaplatform deutsch
Joomlaplatform deutschJoomlaplatform deutsch
Joomlaplatform deutsch
 
Development tools
Development toolsDevelopment tools
Development tools
 
Status des Projektes Joomla!Day Germany 2011
Status des Projektes Joomla!Day Germany 2011Status des Projektes Joomla!Day Germany 2011
Status des Projektes Joomla!Day Germany 2011
 
1.6 - Stand der Entwicklung
1.6 - Stand der Entwicklung1.6 - Stand der Entwicklung
1.6 - Stand der Entwicklung
 

Phpunit