Mastering Unit Testing in ABAP: ein Wegweiser für Softwarequalität
Lesezeit: 3 Min
Unit Testing ist ein unverzichtbares Werkzeug für jede:n Softwareentwickler:in. Es ermöglicht die Verifikation der funktionalen Korrektheit von Softwaremodulen auf der kleinsten Einheitsebene, wie Prozeduren, Klassen oder Funktionsgruppen. In der ABAP-Welt ist ein sauberer Code ein getesteter Code. Unser SAP HR Solution Developer Lev Lourie zeigt Ihnen in seinem Gastbeitrag, wie Sie dabei am besten vorgehen.
Was ist ein Unit Test?
Ein Unit Test ist ein Mechanismus, der Konzepte und Hilfsmittel für das Testen bereitstellt. Er wird mithilfe von Testklassen durchgeführt, die in der Regel lokale Klassen innerhalb von produktiven globalen Klassen sind. Eine Testklasse wird mit dem Zusatz „FOR TESTING“ definiert. Testmethoden prüfen die Korrektheit des getesteten Codes mithilfe von Assertions.
CLASS [EXAMPLE_TEST] DEFINITION
FINAL
FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
[METHOD1_TEST] FOR TESTING.
ENDCLASS.
CLASS [EXAMPLE_TEST] IMPLEMENTATION.
METHOD METHOD1_TEST .
…
CL_ABAP_UNIT_ASSERT=>ASSERT_EQUALS(
EXP = …
ACT = …
MSG = 'UNEXPECTED TEST VALUE’).
ENDMETHOD.
ENDCLASS.
Zusätzliche Attribute in der Klassendefinition sind:
- „RISK LEVEL“, welches das Risiko von harmlos bis kritisch angibt
- und „DURATION“, was die maximale zulässige Ausführungszeit für die Tests innerhalb einer Testklasse in der ABAP-Unit definiert, bevor das Programm den Vorgang abbricht.
Gemeinsame Funktionalität in Unit Tests
Wenn mehrere Unit Tests die gleiche Funktionalität benötigen, können sie eine gemeinsame Oberklasse haben, die Testmethoden in den Unterklassen hat. Wenn keine Testmethoden vererbt werden sollen, wird die gemeinsame Funktionalität in einer Testhelferklasse mit dem Zusatz „ABSTRACT“ bereitgestellt.
Der „gegeben-wenn-dann“-Stil
Die Implementierung der Testmethode wird als Szenario im „gegeben-wenn-dann“-Stil konstruiert. Im „gegeben“-Teil werden die Instanzen und Daten für den Test vorbereitet. Diese Phase wird in der Methode Setup implementiert. Im „wenn“-Teil wird die zu testende Operation ausgeführt. Im „dann“-Teil wird sichergestellt, dass das gewünschte Ergebnis erreicht ist. In diesem Schritt werden Assertions verwendet und wenn das Ergebnis nicht erreicht ist, sollte eine Fehlermeldung ausgegeben werden.
METHOD REJECTS_INVALID_COUNTRY.
" WHEN…
" THEN”
CL_ABAP_UNIT_ASSERT=>ASSERT_TABLE_CONTAINS(
TABLE = MESSAGES
LINE = …
MSG = `EXPECTED ERROR MESSAGE NOT FOUND` ).
ENDMETHOD.
TEST-SEAMS und TEST-INJECTION
Ein weiteres Testinstrument ist „TEST-SEAMS“, bei dem die Code-Teile markiert sind, die während eines Tests durch anderen Code ersetzt werden. Dazu wird im Test-Code ein TEST-INJECTION-Block aufgerufen. Der Code, der im Injection-Block steht, ersetzt den Code im Test-Seam.
Erste Schritte mit Unit Tests in ABAP
Beginnen Sie mit der Auswahl der Klasse, die Sie testen möchten. Navigieren Sie im Menü zu Hilfsmittel -> Testklassen -> Generieren und folgen Sie dem Assistenten, um die Testklasse zu erstellen. Sobald dies erledigt ist, können Sie mit dem Schreiben Ihres ersten Tests für eine Methode Ihrer Klasse beginnen. Rufen Sie die Methode in Ihrem Test auf und nutzen Sie die ASSERT_EQUALS-Methode, um das erhaltene Ergebnis mit dem erwarteten zu vergleichen. Zum Schluss führen Sie den Test aus, indem Sie auf das Unit-Test-Symbol in der Werkzeugleiste klicken.
Getesteter Code ist sauberer Code
Unit Testing in ABAP ist ein mächtiges Werkzeug, das die Qualität der Softwareentwicklung erheblich verbessert. Es ermöglicht Entwicklern, die Funktionalität ihres Codes auf der kleinsten Einheitsebene zu überprüfen und sicherzustellen, dass ihr Code korrekt funktioniert. Mit dem Einsatz von Testklassen, Assertions, dem “gegeben-wenn-dann”-Stil, Test-Seams und Test-Injections bietet ABAP eine umfassende und flexible Testumgebung. Durch die Anwendung dieser Praktiken können ABAP-Entwickler:innen sicherstellen, dass ihr Code sauber, wartbar, effizient und fehlerfrei ist und somit dem Ziel des Clean Codes näherkommen.
Unit Testing ist somit ein wichtiges Instrument der Qualitätssicherung und verkürzt gleichzeitig die Entwicklungszeit erheblich.