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
...
DEMO
1
Montag, 16. September 13
Aha
• Code Coverage zeigt welche Programmteile
durchlaufen wurden
• Obwohl alles durchlaufen wurde, bedeutet das nicht
das...
Assertions
• assert[Not]Equals()
• assert[Not]False()
• assert[Not]Null()
• assertArrayHasKey()
• assert[Not]Empty()
Monta...
DEMO
2
Montag, 16. September 13
Aha
• Jeder Test läuft isoliert mit, setup() und teardown()
initialisieren wir die Testumgebung
• Wie haben eindeutig zu w...
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 aufge...
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 unt...
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 Complexit...
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 öffentli...
Ups
• Wir testen nun auch die Klasse „CoinChecker“, damit ist
der Erfolg unserer Tests von einer anderen Klasse
abhängig
•...
BÖSE
	 public function processInsertedCoins($coin)
	 {
	 	 $credits = CoinChecker::CalculateCredits($coin);
	 	 $this->cou...
DEMO
7+8
Montag, 16. September 13
Aha
• Abhängigkeiten sollten vermieden werden.
• Sind andere Klassen notwendig können diese ggf.
durch Mock-Klassen ersetz...
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
Cod...
Nächste SlideShare
Wird geladen in …5
×

Phpunit

621 Aufrufe

Veröffentlicht am

PhpUnit am Beispiel eines Getränkeautomat erklärt. Bietet einen Einstieg in die Thematik und soll jemanden der an dem Thema interessiert über die ersten Hürden helfen.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
621
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
12
Aktionen
Geteilt
0
Downloads
2
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Phpunit

  1. 1. PhpUnit Robert Deutz, Joomladay Germany 2013 Unit Tests in Joomla! Einführung und Grundlegendes Montag, 16. September 13
  2. 2. Die unvermeidlichen .. Montag, 16. September 13
  3. 3. 2002 Selbstständig 2005 Mamboday 2006 Joomladay 2008 2010 1.5 Beez OSM 2012 2013 JWC Robert Deutz Montag, 16. September 13
  4. 4. • Alle Entwicklungen unter einem Dach • Zentrale Anlaufstelle • Updates Montag, 16. September 13
  5. 5. Ziel? Montag, 16. September 13
  6. 6. Interesse wecken! Montag, 16. September 13
  7. 7. aber wie ...... Montag, 16. September 13
  8. 8. .. anfangen Montag, 16. September 13
  9. 9. - einfach - Montag, 16. September 13
  10. 10. DRINKS coins Beer Water Montag, 16. September 13
  11. 11. Black Box Montag, 16. September 13
  12. 12. Erwartungen Montag, 16. September 13
  13. 13. Behauptungen - assertion - Montag, 16. September 13
  14. 14. Back to Drinks Montag, 16. September 13
  15. 15. 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
  16. 16. DEMO 1 Montag, 16. September 13
  17. 17. 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
  18. 18. Assertions • assert[Not]Equals() • assert[Not]False() • assert[Not]Null() • assertArrayHasKey() • assert[Not]Empty() Montag, 16. September 13
  19. 19. DEMO 2 Montag, 16. September 13
  20. 20. Aha • Jeder Test läuft isoliert mit, setup() und teardown() initialisieren wir die Testumgebung • Wie haben eindeutig zu wenig Bier ;-) Montag, 16. September 13
  21. 21. DEMO 3 Montag, 16. September 13
  22. 22. 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
  23. 23. Wie schreibe ich Tests? Montag, 16. September 13
  24. 24. Falsche Frage oder Falscher Zeitpunkt Montag, 16. September 13
  25. 25. „Schlechter“ Code ist schwer zu testen Montag, 16. September 13
  26. 26. Perfekt: Wenn Tests vor dem eigentlichen Code geschrieben werden Montag, 16. September 13
  27. 27. Reality Check! Montag, 16. September 13
  28. 28. Also, was beachten? Montag, 16. September 13
  29. 29. Programmiere einfach Montag, 16. September 13
  30. 30. 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
  31. 31. Cyclomatic Complexity Montag, 16. September 13
  32. 32. Anzahl der Entscheidungspunkte in einer Routine Montag, 16. September 13
  33. 33. N-Path Complexity Montag, 16. September 13
  34. 34. Anzahl der eindeutigen Pfade durch eine Routine Montag, 16. September 13
  35. 35. DEMO 4 Montag, 16. September 13
  36. 36. Zusammenhang: Cyclomatic und N-Path Complexity NP = 2 ^ (CC-1) Montag, 16. September 13
  37. 37. <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
  38. 38. N-Path ist: Die minimale Anzahl der Tests die nötig sind eine Routine komplett zu testen Montag, 16. September 13
  39. 39. Back to Drinks Montag, 16. September 13
  40. 40. DEMO 5+6 Montag, 16. September 13
  41. 41. 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
  42. 42. 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
  43. 43. BÖSE public function processInsertedCoins($coin) { $credits = CoinChecker::CalculateCredits($coin); $this->countAcceptedCoins($credits); } Montag, 16. September 13
  44. 44. DEMO 7+8 Montag, 16. September 13
  45. 45. 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
  46. 46. Joomla Montag, 16. September 13
  47. 47. DANKE Montag, 16. September 13
  48. 48. * 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

×