1. Testing untestable code Stephan Hochdörfer, bitExpert AG "Quality is a function of thought and reflection - precise thought and reflection. That’s the magic." Michael Feathers
19. Theorie "...our test strategy requires us to have more control or visibility of the internal behavior of the system under test." Gerard Meszaros, xUnit Test Patterns: Refactoring Test Code
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.“ Miško Hevery
Wow so viele Leute hier. Gibt es so viel schlechten Code oder seid ihr nur zum Spass hier?
Wer seit ihr? Wer hat schon untestbaren Code geschrieben? Wer hat versucht solchen Code zu testen?
Zwei grundsätzliche Indikatoren
Starke Kopplung - Tight coupling Abhängigkeiten zu konkreten Implementierungen „new“ Zu viele Abhängigkeiten zu anderen Klassen, besser Interfaces Keine Möglichkeit der Kontrolle der Abhängigkeiten
Ungewissheit Globale Variablen, Singleton, Registry, Globaler Zustand Statische Methodenaufrufe Businesslogik im Konstruktor Ergebnis ist nicht vorhersehbar. Brauchen Kontrolle!
Prozess den Quellcode zu verändern ohne das externe Verhalten zu beeinflussen. Verbessert die nonfunctionalen Attributes der Software Verbessert die Lesbarkeit des Programmcodes Komplexität reduzieren, Wartbarkeit optimieren Durch stetiges Verbesseren des Designs erleichtern wir die tägliche Arbeit mit dem Code.
Henne ↔ Ei Problem – Zum Refactoren brauchen wir Tests die wir nicht bauen können ohne zu refactoren. Alternativen? UI Testing? - Nicht jeder Zustand der Applikation muss in der UI sichtbar sein.
...denn jede Änderungen an vorhandenem Programmcode kann Fehler zur Folge haben. Das wollen wir vermeiden!
Traits in PHP5 – Include für Methoden :) Mehrfachvererbung, irgendwie
Funktionen die nicht den globalen Zustand verändern sind einfach und testbar.
Frames: Marvin Minski in 1970s In the field of Artificial Intelligence, a frame is a data structure for representing knowledge. ICs need to know to to build itself depending on configuration
Code transformations that can be done
„ Smarty on steriods“
Wie wichtig ist die Applikation für mich? Welcher Business value steckt dahinter? Wie kompliziert ist es Tests zu schreiben? Wie viele Fehler treten tatsächlich täglich auf?
This demo should inspire you to think about technoloy and other cool stuff. Your limit is the imagination.