Upload
bathilda-zenk
View
108
Download
4
Embed Size (px)
Citation preview
Use this title slide only with an image
Test Code Design PatternWinfried Schwarzmann, SAP AGFebruary 19, 2014 Public
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 2Public
Agenda
5-S Methode für Test Code
Schritt 3: Säubere den ArbeitsplatzLesbarkeitDuplikation
Schritt 4: Standardisiere Sauberkeit am ArbeitsplatzTest Code Design Pattern
Ausblick
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 3Public
5-S Methode
Entferne auskommentierten Test Code…
1. Sortiere unnötige Dinge aus
Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 4Public
5-S Methode
Formatiere Test Code einheitlich…
2. Stelle verbliebene Dinge ordentlich hin
Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 5Public
5-S Methode
Verbessere die LesbarkeitHebe Duplikation auf
…
3. Säubere den Arbeitsplatz
Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 6Public
5-S Methode
Entwerfe Test Code Design Pattern…
4. Standardisiere Sauberkeit am Arbeitsplatz
Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 7Public
5-S Methode
Wende Test Code Design Pattern effizient an…
5. Sichere den Standard und verbessere ihn
Test Code als primärer Arbeitsplatz eines testgetriebenen Entwicklers
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 8Public
TestmethodeStruktur
Gegeben: Erzeuge Objekt der zu testenden Klasse (CUT) Erzeuge Objekte der abhängigen Klassen (DOCs) Installiere DOCs in CUT (Injektion)
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: Bereite die erwartete Ausgabe vor Vergleiche erwartete mit tatsächlicher Ausgabe
GEGEBEN
WENN
DANN
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 9Public
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?
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 10Public
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
MUTHUT
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 11Public
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
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 12Public
3. Säubere den ArbeitsplatzLesbarkeit, Duplikation: Ein- und Ausgabeobjekt für MUT
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 13Public
3. Säubere den ArbeitsplatzLesbarkeit, Duplikation: Vorbereitung der Erwartung
HUT = WENN + DANN
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 14Public
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-PrinzipGroßer innerer Zusammenhang zwischen MUT auf der einen Seite und HUT und HAT auf der anderen Seite.
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 15Public
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).
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 16Public
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).
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 17Public
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
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 18Public
4. Standardisiere Sauberkeit am ArbeitsplatzDecorator Double TD_CUT
TD_CUT
LTD_DOM
Delegation
Injektion
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 19Public
4. Standardisiere Sauberkeit am ArbeitsplatzDecorator Double TD_CUT: lokale LTD_DOMs
LTD_DOM
TC_CUT
LTD_DOM
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 20Public
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
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 21Public
4. Standardisiere Sauberkeit am ArbeitsplatzTest Double Design Pattern: allgemein
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 22Public
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.
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 23Public
4. Standardisiere Sauberkeit am ArbeitsplatzIsolation von MUT gegen DOC-Methoden: Überblick
© 2014 SAP AG or an SAP affiliate company. All rights reserved.
Danke
Kontakt:
Winfried Schwarzmann, SAP AGTest Code Design PatternEmail: [email protected]
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 25Public
4. Standardisiere Sauberkeit am ArbeitsplatzDecorator Double TD_CUT: Attribute
1
1
1
Problem: Ein TD_DOM1 Objekt setzt ein Attribut, auf das das TD_DOM2 Objekt zugreifen will.
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.
© 2014 SAP AG or an SAP affiliate company. All rights reserved. 26Public
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.
27© 2014 SAP AG or an SAP affiliate company. All rights reserved.