Einsatz von ABAP Unit zur Steigerung der Entwicklungsqualität – Teil I
Im Rahmen einer Artikelserie erscheinen unter dem Thema Einsatz von ABAP Unit drei Beiträge zum effizienten Unit-Testing von ABAP-Entwicklungen.
Dieser erste Artikel zeigt grundlegende Möglichkeiten zum Einsatz von ABAP Unit für Reports und Klassen. Der zweite Artikel geht auf Best Practices ein und erläutert, wie Unit Tests im ABAP Umfeld am besten eingesetzt werden können. Im dritten Artikel wird auf weitere Tools eingegangen, die Sie beim Unit-Testing unterstützen.
Für Besucher von Erlebe Software können wir unseren Kurs „SAP ABAP Dynamische Programmierung“ mit kräftigem Rabatt anbieten.
SAP ABAP Dynamische Programmierung
Warum überhaupt ABAP Unit-Tests?
Unit-Tests dienen der Überprüfung des Verhaltens von einzelnen Komponenten. Eine Komponente im Sinne eines Unit-Testes hat dabei genau eine Funktionalität. Durch Unit-Tests lässt sich schnell und sicher feststellen, ob diese einzelnen Komponenten wie gewünscht funktionieren. Dies ist vor allem für den Anwendungsentwickler, aber auch für die Projektsteuerung wichtig. Während der Anwendungsentwickler jederzeit seinen aktuellen Arbeitsstand überprüfen kann, z.B. ob die Anwendung nach Änderungen noch die Anforderungen erfüllt, kann die Projektsteuerung den Fortschritt des Entwicklungsprojekts verfolgen. Gerade in großen Projekten liegt die Fehlersuche oft tief im Detail, durch ABAP Unit-Tests fallen diese Stellen direkt auf. Im Gegensatz zu manuellen Tests durch Benutzer, laufen automatisierte Unit-Tests in wenigen Sekunden durch und werden automatisch protokolliert. Selbstverständlich ersetzen ABAP Units-Tests manuelles Testen nicht komplett. Zu den Grenzen von ABAP Unit berichte ich im dritten Beitrag dieser Reihe.
Automatisierte Tests lassen sich für klassische Reports, aber auch für ABAP OO Klassen anlegen. ABAP Unit selbst ist objektorientiert umgesetzt.
Sie erhalten die Komplettlösung – Ihr Projekt machen wir zu unserem Projekt. Mit professionellem Projektmanagement sicheren wir den Projekterfolg.
Gerne spreche ich mit Ihnen über Ihre Ausgangslage und zeige Lösungsmöglichkeiten auf. Auf Wunsch unterbreite ich Ihnen im Anschluss ein unverbindliches Angebot.
Kontaktieren Sie mich: Telefon 0211.9462 8572-16 oder per E-Mail info@erlebe-software.de
Ingo Biermann, Fachbereichsleiter
Unit-Tests in ABAP Reports
Zum Testen eines Reports ist eine innere Klasse anzulegen. Die Definition der Klasse beinhaltet die wichtigen Schlüsselwörter DEFINITION FOR TESTING und geschieht im privaten Sichtbarkeitsraum. Die Implementierung der Klasse erfolgt nun immer nach dem gleichen Muster:
- Definition von Variablen für den Ausgangswert und den Erwartungswert
- Aufruf der zu testenden Form-Routine des Reports mit dem Ausgangswert
- Aufruf der Vergleichsmethode des ABAP-Unit-Frameworks mit dem Resultat, dem Erwartungswert und einer auszugebenden Nachricht im Fehlerfall: cl_aunit_assert=>assert_equals( act = resultat exp = erwartungswert msg = ‘nachricht’ )
Über einen Rechtsklick auf den Report und Ausführen->Modultest wird der Unit-Test durchgeführt. Falls das Resultat nicht dem Erwartungswert entspricht, wird die Nachricht in einem Ergebnisdialog ausgegeben. In diesem kann auch an die relevante Stelle gesprungen werden. Im positiven Fall wird nur eine Erfolgsmeldung angezeigt.
Unit-Tests in ABAP OO Klassen
Zum Testen von ABAP OO Klassen übernimmt das ABAP Unit-Framework die Arbeit, die beim Testen von Reports selbst durchzuführen sind. Für eine geöffnete Klasse kann über Hilfsmittel -> Testklassengenerierung eine ABAP Unit Testklasse mit allen nötigen Rümpfen generiert werden.
Für jede vorhandene Methode in der zu testenden Klasse wird eine Testmethode angelegt. Für diese sind nur noch Ausgangswert und Erwartungswert nachzupflegen. Alles andere hat das Unit-Framework bereits erledigt. Nach dem Pflegen der beiden Werte kann der ABAP Unit-Test über einen Rechtsklick auf die Klasse Test->Modultest ausgeführt werden. Auch hier begrüßt einen die bereits von den Reports bekannte Ergbebnisanzeige im Fehlerfall.
Nützliche Methoden der Klasse CL_ABAP_UNIT_ASSERT
ASSERT_EQUALS | Prüft ob zwei Objekte gleich sind. Der Vergleich wird tief durchgeführt. |
ASSERT_DIFFERS | Prüft die Ungleichheit von zwei elementaren Datentypen. |
ASSERT_BOUND | Überprüft die Referenz wie die ABAP-Anweisung “IS BOUND”. |
ASSERT_INITIAL | Überprüft das Objekt wie die ABAP-Anweisung “IS INITIAL”. |
ASSERT_TEXT_MATCHES | Überprüft eine Zeichenkette auf einen regulären Ausdruck. |
FAIL | Lässt den Testfall fehlschlagen. |
In diesem Artikel habe ich die grundlegenden Möglichkeiten von ABAP Unit aufgezeigt. Im nächsten Beitrag gehe ich näher auf Best Practices und den genauen Einsatz im ABAP Umfeld ein.
Gerne verarbeite ich auch Anregungen von Ihnen in meinen nächsten Beiträgen. Dazu freue ich mich auf Ihr Feedback.