270 likes | 431 Views
Test Code Design Pattern. Winfried Schwarzmann, SAP AG February 19, 2014. Public. Agenda. 5-S Methode für Test Code Schritt 3: Säubere den Arbeitsplatz Lesbarkeit Duplikation Schritt 4: Standardisiere Sauberkeit am Arbeitsplatz Test Code Design Pattern Ausblick. 5-S Methode.
E N D
Test Code Design Pattern Winfried Schwarzmann, SAP AGFebruary 19, 2014 Public
Agenda 5-S Methodefür Test Code Schritt 3: Säubere den Arbeitsplatz • Lesbarkeit • Duplikation Schritt 4: StandardisiereSauberkeit am Arbeitsplatz • Test Code Design Pattern Ausblick
5-S Methode Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers 1. Sortiere unnötige Dinge aus Entferne auskommentierten Test Code …
5-S Methode Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers 2. Stelle verbliebene Dinge ordentlich hin Formatiere Test Code einheitlich …
5-S Methode Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers 3. Säubere den Arbeitsplatz Verbessere die Lesbarkeit Hebe Duplikation auf …
5-S Methode Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers 4. Standardisiere Sauberkeit am Arbeitsplatz Entwerfe Test Code Design Pattern …
5-S Methode Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers 5. Sichere den Standard und verbessere ihn Wende Test Code Design Pattern effizient an …
TestmethodeStruktur GEGEBEN Gegeben: Erzeuge Objekt der zu testenden Klasse (CUT) Erzeuge Objekte der abhängigen Klassen (DOCs) Installiere DOCs in CUT (Injektion) WENN Wenn: Bereite Eingabe vor (Argumente für Eingabeparameter) Führe die zu testende Methode (MUT) mit Eingabe aus Nehme (tatsächliche) Ausgabe oder Fehlermeldung entgegen DANN Dann: Bereite die erwartete Ausgabe vor Vergleiche erwartete mit tatsächlicher Ausgabe
3. Säubere den ArbeitsplatzLesbarkeit: allgemein • Lesbarkeit eines Methodenaufrufs: • Gute Namen für die Methode und ihre Parameter • Beschränkung auf wenige Eingabeparameter • Vermeide Schalter und Negation bei Parametern Nur wenige zu testende Methoden erfüllen diese Kriterien. Was tun?
3. Säubere den ArbeitsplatzLesbarkeit: MUT Aufruf • Lösung: Hilfsmethode (HUT) der Testklasse kapselt MUT Aufruf • HUT Name präzise und informativ • Name der HUT Parameter einfach und selbsterklärend • HUT Aufruf ohne Dummy Parameter • HUT Aufruf ohne Parameter wenn Eingabe im HUT Name • HUT Aufruf mit wenigen Schaltern • HUT Schalter ohne/richtige Negation MUT HUT
3. Säubere den ArbeitsplatzLesbarkeit, Duplikation: Ein- und Ausgabe von MUT • Lösung: Hilfsattribute (HATs) der Testklasse • HUT muss keine Parameter für Dateneingabe definieren • HUT muss keine Parameter für Datenausgabe definieren • HUT kann Datenausgabe gleich mit Erwartung vergleichen
3. Säubere den ArbeitsplatzLesbarkeit, Duplikation: Ein- und Ausgabeobjekt für MUT
3. Säubere den ArbeitsplatzLesbarkeit, Duplikation: Vorbereitung der Erwartung HUT = WENN + DANN
4. Standardisiere Sauberkeit am ArbeitsplatzTest Class Design Pattern Test Class Design Pattern: Eine Testklasse soll sich auf eine Produktivmethode beschränken. Begründung: Single-Responsibility-Prinzip Großer innerer Zusammenhang zwischen MUT auf der einen Seite und HUT und HAT auf der anderen Seite.
4. Standardisiere Sauberkeit am ArbeitsplatzIsolation von MUT gegen CUT-Methoden: Überblick TD_MUT leitet von CL_CUT ab und redefiniert die CUT Methoden, von denen MUT abhängt (DOMs).
4. Standardisiere Sauberkeit am ArbeitsplatzIsolation von MUT: Probleme • Probleme: • Verschiedene DOM Anforderungen der MUT Tests führen in TD_MUT zu Fallunterscheidungen oder komplexem Code (Lesbarkeit). • DOM Redefinitionen der Test Double Klassen zu verschiedenen MUTs sind ähnlich (Duplikation).
4. Standardisiere Sauberkeit am ArbeitsplatzIsolation von MUT: Lösung TD_DOM als einziger Anbieter von DOM Redefinitionen: statt für jedes MUT die DOM Redefinitionen auf lokale Test Double Klassen zu verteilen Isolation von MUT aus mehreren DOM Doubles kombinierbar: spezielle Testanforderungen für MUT einfach und uneingeschränkt erfüllbar (z.B. ein DOM Double als Saboteur) TD_CUT als globaler Kombinierer der DOM Doubles (Decorator Pattern): statt CUT nehmen Tests TD_CUT ins Visier, das das Zusammenwirken aller für die MUT Isolation benötigten DOM Doubles ermöglicht
4. Standardisiere Sauberkeit am ArbeitsplatzDecorator Double TD_CUT TD_CUT LTD_DOM Delegation Injektion
4. Standardisiere Sauberkeit am ArbeitsplatzDecorator Double TD_CUT: lokale LTD_DOMs LTD_DOM TC_CUT LTD_DOM
4. Standardisiere Sauberkeit am ArbeitsplatzTest Double Design Pattern Test Double Design Pattern: Eine Test Double Klasse soll sich auf eine Produktivmethode beschränken. • Begründung: SOLID-Prinzipien • Für das globale Decorator Double TD_CUT und seine lokalen Methoden Doubles LTD_DOMs sprechen: • Single-Responsibility: Änderung eines DOM Doubles • Open-Closed: Hinzufügen eines neuen DOM Doubles • Liskovsche Substitution: DOM Doubles verhalten sich wie CUT
4. Standardisiere Sauberkeit am ArbeitsplatzTest Double Design Pattern: allgemein
4. Standardisiere Sauberkeit am ArbeitsplatzTest Double Design Pattern: wenn MUT hat nur ein DOM Ohne Dekorator Double Klasse TD_CUT, da TD_DOM per Definition genau nur DOM redefiniert.
4. Standardisiere Sauberkeit am ArbeitsplatzIsolation von MUT gegen DOC-Methoden: Überblick
Danke • Kontakt: • Winfried Schwarzmann, SAP AG • Test Code Design Pattern • Email: winfried.schwarzmann@sap.com
4. Standardisiere Sauberkeit am ArbeitsplatzDecorator Double TD_CUT: Attribute Problem: Ein TD_DOM1 Objekt setzt ein Attribut, auf das das TD_DOM2 Objekt zugreifen will. 1 1 1 Decorator DOM Redefinition: IF mo_dom IS BOUND. mo_dom->m_attr_accessed_by_dom = m_attr_accessed_by_dom. mo_dom->dom( ). m_attr_written_by_dom = mo_dom->m_attr_written_by_dom. ELSE. super->dom( ). ENDIF.
4. Standardisiere Sauberkeit am ArbeitsplatzTest Double Design Pattern (Verfeinerung) Test Double Design Pattern (Verfeinerung): Eine Decorator Double Klasse sollte sich auf ein Produktivinterface beschränken. Begründung: Interface-Segregation-Prinzip.