SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Referenz → Programmbearbeitung → Programme testen und prüfen → ABAP Unit →Testseams
Testseams sind speziell für Modultests vorgesehene Sprachkonstrukte, die durch die folgenden Anweisungen verwirklicht werden:
Testseams haben folgende Eigenschaften:
Hinweis
Testseams erlauben es, auf einfache Art zu Testzwecken Quelltext im produktiven Teil des Programms auszutauschen oder zu ergänzen. Behindert z.B. das Verhalten einzelner Anweisungen die Testdurchführung, kann der Modultest diese durch geeignete Alternativen ersetzen. Typische Szenarien sind:
Beispiel für Berechtigungsprüfungen
Um die Abhängigkeit eines Modultests von den Berechtigungen des aktuellen Benutzers zu umgehen, kann eine Injection die Anweisung AUTHORITY-CHECK durch das Setzen eines geeigneten Rückgabewerts ersetzen.
Testseam | Injection |
TEST-SEAM authorization_seam. AUTHORITY-CHECK OBJECT 'S_CTS_ADMI' ID 'CTS_ADMFCT' FIELD 'TABL'. END-TEST-SEAM. IF sy-subrc = 0. is_authorized = abap_true. ENDIF. |
TEST-INJECTION authorization_seam. sy-subrc = 0. END-TEST-INJECTION. |
Beispiel für das Lesen von persistenten Daten
In Modultests kann oft keine Annahme über den Inhalt von Datenbanktabellen oder sonstigen Ablagen gemacht werden. Mit Testseams können Modultests Abhängigkeiten von persistenten Daten durch den Austausch mit selbst konstruierten Daten umgehen.
Testseam | Injection |
TEST-SEAM read_content_seam. SELECT * FROM sflight WHERE carrid IN @carrid_range AND fldate EQ @sy-datum INTO TABLE @flights. END-TEST-SEAM. |
TEST-INJECTION read_content_seam. flights = VALUE #( ( carrid = 'LHA' connid = 100 ) ( carrid = 'AFR' connid = 900 ) ). END-TEST-INJECTION. |
Beispiel für das Ändern von persistenten Daten
Die Ausführung von Modultest darf keinen produktiv genutzten Inhalt von Datenbanktabellen oder sonstigen Ablagen ändern. Mit Testseams können Modultests die Operanden ändernder Datenbankoperationen aufzeichnen oder anstelle der tatsächlichen Änderung mit der Erwartung vergleichen. In dem folgenden Quelltextabschnitt vergleicht die Injection die Änderungswerte mit einem öffentlichen statischen Attribut.
Testseam | Injection |
TEST-SEAM store_content_seam. MODIFY sflight FROM TABLE @new_flights. END-TEST-SEAM. |
TEST-INJECTION store_content_seam. cl_abap_unit_assert=>assert_equals( act = new_flights exp = global_buffer=>exp_flights ). END-TEST-INJECTION. |
Beispiel für eine Testattrappe
In folgendem Quelltextabschnitt instanziert der produktive Quelltext eine Klasse, die von Datenbankinhalt abhängt. Der Modultest injiziert die Instanzierung einer Testattrappe an Stelle des produktiven Objekts.
Testseam | Injection |
TEST-SEAM instantiation_seam. me->oref = NEW #( ). END-TEST-SEAM. |
TEST-INJECTION instantiation_seam. me->oref = NEW dummy_class( ). END-TEST-INJECTION. |
Beispiel
Siehe auch die Klasse CL_AU_SAMPLE_TEST_SEAMS im Paket SABP_UNIT_SAMPLE.