
ABAP Unit - Analyse
In diesem Artikel geht es um die Analyse der Testfälle die wir geschrieben haben, wie kommen wir an die nötigen Informationen und wie können wir diese interpretieren.
Inhaltsverzeichnis
Nachdem du nun gelernt hast, was eigentlich ABAP Unit ist, wie du einen einfachen Test aufsetzt und wo du überall das Framework einsetzen kannst, beschäftigen wir uns hier mit dem Thema der Analyse. Welche Möglichkeiten stehen dir weiterhin zur Verfügung.
Testergebnis
Wenn du den Unit Test normal ausführst, dann wird die Testklasse bzw. die Testklassen im aktuellen Objekt gesucht und nacheinander ausgeführt. Am Ende erfolgt die Ausgabe des Ergebnisses, das hoffentlich positiv ausfällt.
Die Ausgabe erfolgt im ABAP Unit View in Eclipse und bietet eine einfache Übersicht des Testergebnisses. Dabei hast du noch die Möglichkeit zwischen den verschiedenen Fehlertypen mit den Checkboxen zu wechseln, wenn du zum Beispiel nur die Fehler sehen möchtest. Im oberen Teil hast du einige Buttons, die dir die folgenden Optionen bieten:
- Auf-/Zuklappen der Klassen, Testklassen und Methoden
- Ergebnis filtern und nur bestimmte Testmethoden noch einmal durchführen
- Test wiederholen
- Historie zu durchgeführten Tests
- weitere Einstellungen
Sollte der Test einmal abbrechen, dann könnte das Bild entsprechend anders aussehen. In diesem Fall ist die Klasse mit dem Fehler aufgeklappt und die Methode wird angezeigt, die einen Fehler hatte. Der Fehler-Trace wird dir im unteren Bereich oder auf der rechten Seite des Fensters angezeigt.
Per Doppelklick auf den Stack (markierte Zeile im Screenshot), kannst du direkt zum Assert in deinem Testfall springen, um mit der genaueren Analyse des Fehlers zu beginnen.
Abdeckungsmessung
Mit der Abdeckungsmessung oder auch Coverage Analyse kannst du zusätzlich noch die Abdeckung deiner Testfälle analysieren. Hier geht es darum, wie viel des Codings im Objekt durch die Testfälle abgedeckt werden. Du kannst in einer Klasse sehr viele Testfälle hinterlegen, wenn sie aber alle die gleichen Verzweigungen abdecken und keine Sonderfälle simulieren, dann sind sie nicht vollständig und decken keine 100% ab.
Für die Verdeutlichung legen wird die folgende Klasse an, die eine Methode zur Verfügung stellt und eine Division durchführt.
CLASS zcl_demo_coverage DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
td_result TYPE p LENGTH 15 DECIMALS 5.
CONSTANTS:
c_fail TYPE td_result VALUE -999.
METHODS:
divide_numbers
IMPORTING
id_num1 TYPE i
id_num2 TYPE i
RETURNING VALUE(rd_result) TYPE td_result.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_demo_coverage IMPLEMENTATION.
METHOD divide_numbers.
TRY.
rd_result = id_num1 / id_num2.
CATCH cx_sy_zerodivide.
rd_result = c_fail.
ENDTRY.
ENDMETHOD.
ENDCLASS.
Dazu definieren wir die folgende Testklasse mit einem Testfall für die Methode:
CLASS ltc_class_basic DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
divide_10_and_2 FOR TESTING.
ENDCLASS.
CLASS ltc_class_basic IMPLEMENTATION.
METHOD divide_10_and_2.
DATA(lo_cut) = NEW zcl_demo_coverage( ).
DATA(ld_result) = lo_cut->divide_numbers( id_num1 = 10 id_num2 = 2 ).
cl_abap_unit_assert=>assert_equals( act = ld_result exp = 5 ).
ENDMETHOD.
ENDCLASS.
Wir führen den Test dieses Mal mit STRG + SHIFT + F11 aus und bekommen wieder ein erfolgreiches Ergebnis. In diesem Fall wurde aber auch zusätzlich eine Abdeckungsmessung durchgeführt. Diese finden wir in Eclipse in einer eigenen View, der “ABAP Coverage”.
Wie du siehst beträgt die Abdeckung lediglich 60% obwohl wir doch die Methode sauber getestet haben? Dazu wechseln wir in die Klasse, aber vorher nicht vergessen den Button “Hide Highlighting” zu deaktivieren, damit wir die Markierungen im Quellcode sehen.
Hier wird schnell ersichtlich, dass wir keinen negativen Testfall aufgebaut haben, also was passiert eigentlich, wenn wir für die zweiten Nummer eine Null übergeben? Hier würde es sich lohnen eine zweite Testmethode anzulegen und auch diesen Fall zu durchlaufen. Die Abdeckungsmessung gibt dir Rückschlüsse über die Qualität und Abdeckung deines Codes durch deine Testklasse.
Fazit
In diesem Artikel gin es um die Analyse deiner Testklasse im Hinblick auf die Qualität deiner Testfälle und die Abdeckung des Codes durch deine Tests. Du solltest allerdings auch berücksichtigen, dass eine 100% Abdeckung nicht immer Sinn macht und manchmal ein zu hoher Aufwand ist.