ABAP Unit Test – Testen unter ABAP leicht gemacht

In diesem Artikel erfährst Du wie man mit der Programmiersprache ABAP Unit Tests einfach erstellt und damit eine höhere Codequalität gewährleistet. Neben der Programmierung mit ABAP ist das Testen ein zentraler Bestandteil in der Entwicklung und Reife eines ABAP-Programms. Wie man mit ABAP Unit Test einen automatisierten Test entwickelt, wird in den nächsten Abschnitten im Detail beschrieben.

Was ist ein Unit Test?

Ein Unit Test ist ein automatisierter Test einzelner Programmeinheiten. Typischerweise werden damit Methoden und Klassen getestet. Ein Unit Test wird auch als Modultest bezeichnet.

Der Vorteil von Unit Tests ist die Automatisierung. Bei der Erstellung von Unit Tests werden erwartete Ausgaben von Programmeinheiten auf die Richtigkeit getestet. Wenn das erwartete Ergebnis eintritt, so ist der Unit Test erfolgreich. Wenn ein unerwartetes Ergebnis eintritt, deutet das auf einen Fehler in der Programmierung hin.

Sobald man einmal also einen Unit Test entwickelt hat, kann man fehlerhafte Programmänderungen schnell und einfach identifizieren, ohne manuell jede Programmierung noch einmal zu testen.

Durch Unit Tests werden also individuelle Komponenten in einer Isolation getestet.

Eine Methode einer Testklasse kann somit als Beispiel folgendermaßen aussehen:

  METHOD sum_2_numbers.
    DATA: lv_result TYPE int8_lew.

    CALL METHOD f_cut->sum_2_numbers
      EXPORTING
        i_number_1 = 15
        i_number_2 = 3
      IMPORTING
        e_result   = lv_result.

    cl_abap_unit_assert=>assert_equals(
      act = lv_result
      exp = 18
      ).

  ENDMETHOD.

In diesem Beispiel wird eine Methode getestet, die zwei Zahlen addiert. Das Resultat als Ergebnis wird mit einem erwarteten Wert verglichen.

Was ist eine ABAP Unit Testklasse?

Für einen ABAP Unit Test benötigt man eine ABAP Unit Testklasse. Eine Testklasse testet die Methoden einer anderen ABAP-Klasse.

Eine ABAP-Testklasse erkennt man bei der Definition an dem Zusatz “FOR TESTING“. Zusätzlich hinaus wird Dauerart und die Risikostufe angegeben.

Die eigentlichen ABAP Unit Tests werden in den Methoden der Testklasse ausgeführt. Eine Testklasse kann dabei auch einen Funktionsbaustein testen. Dann muss die Testklasse in einem Include der Funktionsgruppe implementiert werden.

Methoden

Durch den Zusatz “FOR TESTING” wird die ABAP-Klasse als Testklasse deklariert und verwendet das Unit Test Framework. Dadurch steht der Klasse automatisch folgende Methoden zur Verfügung:

MethodeBeschreibung
CLASS_SETUPStatische Methode
Wird einmal beim Starten des Testlaufs ausgeführt
SETUPInstanzmethode
Wird beim Aufruf jeder Testmethode ausgeführt
CLASS_TEARDOWNStatische Methode
Wird einmal beim Beenden des Testlaufs ausgeführt
TEARDOWNInstanzmethode
Wird beim Beenden jeder Testmethode ausgeführt

Wenn die Methoden verwendet werden sollen, müssen diese natürlich in der Klassendefinition deklariert werden. Diese Methoden müssen dabei nicht implementiert werden.

Beispiel einer ABAP-Testklasse

In diesem Beispiel möchten wir eine ABAP-Testklasse für eine einfache ABAP-Klasse erstellen. Neben einer Getter- und einer Setter-Methode besitzt diese Klasse eine Methode sum_2_numbers, die zwei Zahlen addiert und das Ergebnis zurückgibt.

  METHOD sum_2_numbers.
    e_result = i_number_1 + i_number_2.
  ENDMETHOD.

Diese Methode kann nun einfach mit einer ABAP-Testklasse getestet werden. Die Definition und Implementierung der ABAP-Testklasse könnte folgendermaßen aussehen:

*----------------------------------------------------------------------
* Definition zcl_erp_up_test
*----------------------------------------------------------------------
CLASS zcl_erp_up_test DEFINITION FOR TESTING
  DURATION SHORT
  RISK LEVEL HARMLESS
.
  PRIVATE SECTION.
    DATA:
      f_cut TYPE REF TO zcl_erp_up.  "class under test

    METHODS: setup,
             sum_2_numbers FOR TESTING.
ENDCLASS.       "zcl_Erp_Up_Test

*----------------------------------------------------------------------
* Implementation zcl_erp_up_test
*----------------------------------------------------------------------
CLASS zcl_erp_up_test IMPLEMENTATION.

  METHOD setup.
    f_cut = NEW zcl_erp_up( ).
  ENDMETHOD.

  METHOD sum_2_numbers.
    DATA: lv_result TYPE int8_lew.

    CALL METHOD f_cut->sum_2_numbers
      EXPORTING
        i_number_1 = 15
        i_number_2 = 3
      IMPORTING
        e_result   = lv_result.

    cl_abap_unit_assert=>assert_equals(
      act = lv_result
      exp = 18
      ).


  ENDMETHOD.

ENDCLASS.

In diesem Beispiel wird die Methode sum_2_numbers mit den Eingabewerten 15 und 3 getestet. Der Rückgabewert soll 18 sein.

ABAP-Testklasse anlegen

Es gibt zwei einfache Möglichkeiten, eine ABAP-Testklasse in der ABAP-Workbench (Transaktion SE80) bzw. Class Builder (SE24) anzulegen:

  • Testklassengenerierung / Wizard
  • Manuell Testklasse anlegen

Testklassengenerierung / Wizard

Die einfachste und schnellste Möglichkeit, eine Testklasse anzulegen, ist mit dem Wizard. Die Testklassengenerierung wird über das Kontextmenü aufgerufen. Hierfür klickt man mit der rechten Maustaste im Objektbaum auf seine zu testende Klasse und wählt “Anlegen > Testklasse generieren”.

Die einfachste und schnellste Möglichkeit, eine Testklasse anzulegen, ist der Wizard. Die Testklassengenerierung wird über das Kontextmenü aufgerufen. Hierfür klickt man mit der rechten Maustaste im Objektbaum auf seine zu testende Klasse und wählt "Anlegen > Testklasse generieren".

Anschließend öffnet sich ein Fenster, das einen nun Stück für Stück durch die Anlage einer ABAP-Testklasse führt. Die erste Option “Start” kann man mit dem Weiter-Button bestätigen. Anschließend landet man in der Klassenauswahl. Hier gibt man seine globale oder lokale Klasse an. Dadurch, dass man über die zu testende Klasse den Wizard aufgerufen hat, ist dieser Klassenname schon vorausgefüllt.

Anschließend öffnet sich ein Fenster, das einen nun Stück für Stück durch die Anlage einer ABAP-Testklasse führt. Die erste Option "Start" kann man mit dem Weiter-Button bestätigen. Anschließend landet man in der Klassenauswahl. Hier gibt man seine globale oder lokale Klasse an. Dadurch, dass man über die zu testende Klasse den Wizard aufgerufen hat, ist dieser Klassenname schon vorausgefüllt.

Nachdem man erneut auf den Weiter-Button gedrückt hat, drückt man auf den Anlegen-Button, gibt seinen Testklassennamen an und wählt die Dauerart und Risikostufe. Bei Bedarf kann eine Oberklasse noch angegeben werden. Achte auf die Namenskonvention, um im Team eine einheitliche ABAP-Programmierung zu gewährleisten.

Nachdem man erneut auf den Weiter-Button gedrückt hat, drückt man auf den Anlegen-Button, gibt seinen Testklassennamen an und wählt die Dauerart und Risikostufe. Bei Bedarf kann eine Oberklasse noch angegeben werden.

Als letzte Tätigkeit wählt man die zu testenden Methoden aus. Hier kann man mehrere Methoden auswählen, wodurch automatisch eine Testmethode dafür erstellt wird.

Als letzte Tätigkeit wählt man die zu testenden Methoden aus. Hier kann man mehrere Methoden auswählen, wodurch automatisch eine Testmethode dafür erstellt wird.

Abschließend bestätigt man die Zusammenfassung und schließt die Testklassengenerierung ab. Sofort wird der ABAP-Code gemäß angegebenen Optionen generiert.

Manuell Testklasse anlegen

Manuell kann man ebenfalls leicht eine ABAP-Testklasse für einen ABAP Unit Test programmieren. Hierfür wählt man im Objektbaum in der ABAP-Workbench “Anlegen > Klassenbibliothek > Klasse” bzw. in der Kategorie Klasse “Anlegen > Klasse”. Daraufhin kann man im Fenster die Option “Testklasse (ABAP Unit)” auswählen und auf den Sichern-Button klicken.

Manuell kann man ebenfalls leicht eine ABAP-Testklasse für einen ABAP Unit Test programmieren. Hierfür wählt man im Objektbaum in der ABAP-Workbench "Anlegen > Klassenbibliothek > Klasse" bzw. in der Kategorie Klasse "Anlegen > Klasse". Daraufhin kann man im Fenster die Option "Testklasse (ABAP Unit)" auswählen und auf den Sichern-Button klicken.

Anschließend kann man genauso die Definition und Implementierung angeben wie es der Wizard für einen abnimmt.

Ich persönlich empfehle die Anlage einer Testklasse über den Wizard, da einem hier viel Schreibarbeit abgenommen wird.

ASSERT_EQUALS – Vergleiche in ABAP Unit Tests

In Testmethoden vergleicht man das tatsächliche Ergebnis mit dem erwarteten Ergebnis. Die notwendige und sehr nützliche Klasse für Vergleiche ist: cl_abap_unit_assert.

Diese Klasse enthält unter anderem die Methode assert_equals, um diese Vergleiche umzusetzen. Neben der wichtigen assert_equals-Methode gibt es noch weitere nützliche Methoden für ABAP Unit Tests.

Diese Klasse enthält unter anderem die Methode assert_equals, um diese Vergleiche umzusetzen. Neben der wichtigen assert_equals-Methode gibt es noch weitere nützliche Methoden für ABAP Unit Tests.

In der Testmethode verwendet man solche assert-Methoden, um die Ausgabe der Unit Tests auswerten zu können.

ABAP Unit Test auswerten

Die wichtigste Funktion der ABAP Unit Tests ist die automatisierte Auswertung. Einen ABAP Unit Test kann man einfach über das Kontextmenü auswerten bzw. ausführen. Hierfür klickt man mit der rechten Maustaste auf die zu testende Klasse und wählt “Ausführen > Modultest mit > Abdeckungsmessung” aus.

Die wichtigste Funktion der ABAP Unit Tests ist die automatisierte Auswertung. Einen ABAP Unit Test kann man einfach über das Kontextmenü auswerten bzw. ausführen. Hierfür klickt man mit der rechten Maustaste auf die zu testende Klasse und wählt "Ausführen > Modultest mit > Abdeckungsmessung" aus.

Anschließend bekommt man die Ergebnisse der ABAP Unit Tests angezeigt. Man kann sich dabei in der Abdeckungsmetrik anzeigen lassen wie viel Prozent man von der Klasse getestet hat.

Anschließend bekommt man die Ergebnisse der ABAP Unit Tests angezeigt. Man kann sich dabei in der Abdeckungsmetrik anzeigen lassen wie viel Prozent man von der Klasse getestet hat.

Lokale ABAP Testklasse löschen

Eine lokale Testklasse kannst Du nicht über einen Button löschen, sondern Du musst einfach den Quellcode entfernen und dann die Klasse aktivieren.

Kurs für ABAP Unit Testing

Es gibt auf der Lernplattform openSAP den kostenlosen Kurs “Writing Testable Code for ABAP”, der das Thema ABAP Unit Test sehr gut praktisch erläutert. Dabei lernt man anhand von Videos und Praxiseinheiten ABAP Unit Tests im Detail kennen. Diesen Kurs kann ich sehr empfehlen.

Über den Autor

Andreas Geiger

Schön, dass Du Dich für SAP ERP interessierst.

Mein Name ist Andreas Geiger und ich bin der Gründer von ERP-UP.de. Mein Ziel ist es, so viel nützliches Wissen wie möglich über das SAP ERP-System zu vermitteln. Ich möchte Dir damit einen Mehrwert bieten. Es freut mich, wenn ich Dir damit helfen kann.

Mehr zu ERP UP

Schreibe einen Kommentar