ABAP Unit
# ABAP Unit

ABAP Unit ist die xUnit-Umsetzung für die Programmiersprache ABAP. ABAP Unit ist dabei direkt in die Sprache ABAP und die Entwicklungsumgebungen SE80 sowie Eclipse integriert.

Die Modultests sind als spezielle Testklassen modelliert. Eine solche Testklasse hat i. d. R. eine oder mehrere Testmethoden und optional spezielle Methoden zum Auf- und Abbau des Testumfeldes. Die Testklassen können als lokale Klassen direkt im zu testenden Programm enthalten sein. Dadurch kann es nie zu abweichenden Versionen zwischen Modultest und getester Funktionalität kommen. Durch die Sprachintegration ist dabei eine strikte Trennung zwischen Produktiv- und Test-Code sichergestellt. So können die Testklassen den Produktiv-Code ausführen, aber nicht umgekehrt.

Es ist möglich, die Modultests direkt aus den Editoren und dem Repository Browser der SE80 auszuführen (Ctrl+Shift+F10). In neueren Versionen (>= Netweaver 7.02) gibt es einen speziellen ABAP Unit Browser und eine Anbindung an die Abdeckungs- oder Coverage-Ermittlung. Mit Hilfe des Werkzeuges Code Inspector kann man viele Modultests auf einmal ausführen, z. B. alle Modultests, die in Programmen eines Paketes enthalten sind. Es gibt in ABAP Unit keine Möglichkeit, einzelne Modultests programmatisch zu Test-Suites zusammenzufassen. Als Workaround können jedoch Selektionsvarianten zum Programm RS_AUCV_RUNNER mit unterschiedlichen zu testenden Paketen, Klassen, Funktionsgruppen und Programmen angelegt werden.

Ab ABAP 7.40 steht mit der Klasse CL_ABAP_TESTDOUBLE ein syntaktisch an EasyMock angelehntes Mocking-Framework zur Verfügung. ABAP 7.50 führt mit Test-Seams die Möglichkeit des partiellen Mockings ein, indem einzelne Codebereiche (z. B. die bis dato nicht mockbaren Funktionsbausteinaufrufe) im Unit-Test redefiniert werden können.

Ab ABAP 7.52 können mittels der Klasse CL_OSQL_TEST_ENVIRONMENT Datenbank-Tabellen gemockt werden. Die gemockten Tabellen ersetzen die Originale in Open-SQL-Anweisungen ohne Änderungen am produktiven Coding, sodass im Testfall nicht auf produktiven Daten gearbeitet wird.

