testing untestable code - phpugffm 01/11

Download Testing untestable code - PHPUGFFM 01/11

If you can't read please download the document

Upload: stephan-hochdoerfer

Post on 28-Jun-2015

1.819 views

Category:

Technology


1 download

TRANSCRIPT

  • 1. Testing untestable code Stephan Hochdrfer, bitExpert AG "Quality is a function of thought and reflection -precise thought and reflection. Thats the magic." Michael Feathers

2. Agenda

  • ber mich 3. Theorie 4. Wie man untestbaren PHP Code testet 5. Testbaren Code generieren 6. Fazit 7. Fragen?

8. ber mich

    • Stephan Hochdrfer, bitExpert AG 9. Department Manager Research Labs 10. PHP Fanboy seit 1999 11. [email_address] 12. @shochdoerfer

13. Keine Entschuldigung fr schlechten Code! 14. Nutzung auf eigene Gefahr... 15. Theorie "There is no secret to writing tests, thereare only secrets to write testable code!" Miko Hevery 16. Theorie Was ist untestbarer Code? 17. Theorie Was ist untestbarer Code? 18. Theorie Was ist untestbarer Code? 19. Theorie "...our test strategy requires us to have more control orvisibility of the internal behavior of the system under test." Gerard Meszaros, xUnit Test Patterns: Refactoring Test Code 20. Theorie Test Klasse Unittest abhng. Klasse abhng. Klasse 21. Theorie Test Klasse Unittest abhng. Klasse abhng. Klasse Datenbank ext. Ressource abhng. Klasse abhng. Klasse Webservice 22. Theorie Test Klasse Unittest abhng. Klasse abhng. Klasse Datenbank ext. Ressource abhng. Klasse abhng. Klasse Webservice 23. Theorie Wie bekomme ich testbaren Code? 24. Theorie Wie bekomme ich testbaren Code? Refactoring 25. Theorie "Before you start refactoring, check that youhave a solid suite of tests." Martin Fowler, Refactoring 26. untestbaren PHP Code testen Ran an die Arbeit... 27. untestbaren PHP Code testen Sicherheitsanweisung Bestehenden Programmcode nichtverndern! 28. untestbaren PHP Code testen | __autoload 29. untestbaren PHP Code testen | __autoload Wie die Abhngigkeit auflsen?

    • __autoload verwenden

30. untestbaren PHP Code testen | __autoload 31. untestbaren PHP Code testen | include_path 32. untestbaren PHP Code testen | include_path Wie die Abhngigkeit auflsen?

    • include_path manipulieren

33. untestbaren PHP Code testen | include_path 34. untestbaren PHP Code testen | include_path Alternative Quelle: Alex Netkachov, http://www.alexatnet.com/node/203 35. untestbaren PHP Code testen | include_path Alternative 36. untestbaren PHP Code testen | Namespaces 37. untestbaren PHP Code testen | Namespaces Wie die Abhngigkeit auflsen?

    • __autoload oder include_path manipulieren

38. untestbaren PHP Code testen | vfsStream 39. untestbaren PHP Code testen | vfsStream Wie die Abhngigkeit auflsen?

    • VfsStream verwenden - http://code.google.com/p/bovigo/

40. untestbaren PHP Code testen | vfsStream 41. untestbaren PHP Code testen I have no idea how to unit-test procedural code. Unit-testing assumes that I can instantiate a piece of my application in isolation. Miko Hevery 42. untestbaren PHP Code testen | Funktionen testen 43. untestbaren PHP Code testen | Funktionen testen Wie testen?

    • PHPUnit kann Funktionsaufrufe testen 44. PHPUnit kann den globalen Zustand speichern/wiederherstellen

45. untestbaren PHP Code testen | Interne Funktionen berschreiben 46. untestbaren PHP Code testen | Interne Funktionen berschreiben Wie testen?

    • mysql extension nicht laden. Eigene Implementierung bereitstellen 47. Problem: mail() ist Teil des PHP Kerns

48. untestbaren PHP Code testen | Interne Funktionen berschreiben Wie testen?

    • Classkit Extension zum berladen interner Funktionen verwenden

49. untestbaren PHP Code testen | Interne Funktionen berschreiben 50. untestbaren PHP Code testen 51. Generative Programmierung 52. Generative Programmierung 1 ... n Konfiguration Implementierungs- Komponenten Generator- System Produkte Generator 53. Generative Programmierung Konfiguration Implementierungs- Komponenten Generator- System Anwendung Generator Testflle 54. Vorgehensweise Extraktion

    • Ausblenden von Programmcode

Individualisierung

    • Globale Variablen mit anderen Inhalten belegen 55. Pre/Postfixes fr Funktionen, Methoden, Klassen

Rekombination

    • Teile des Programmcodes neu anordnen

56. 57. 1. Beispiel Prefix: test_ 58. 1. Beispiel Prefix: test_ 2. Beispiel MailSlot: mail('[email protected]', 'New sale', '....'); 59. Fazit Wie weit soll man gehen? 60. Fazit Fazit

    • Denkweise ndern
      • Programmcode auf Testbarkeit hin optimieren 61. Dependency Injection
    • ber den Tellerrand hinaus
      • Limitierungen von PHP umgehen 62. PHP ist flexibel

63. http://joind.in/2482