Ansicht
Dokumentation

ABAPCLASS_FOR_TESTING - CLASS FOR TESTING

ABAPCLASS_FOR_TESTING - CLASS FOR TESTING

CPI1466 during Backup   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

CLASS, FOR TESTING

Kurzreferenz



CLASS class DEFINITION FOR TESTING $[RISK LEVEL ${CRITICAL$|DANGEROUS$|HARMLESS$}$]
                                   $[DURATION ${SHORT$|MEDIUM$|LONG$}$].


Zusätze:

1. ... RISK LEVEL ${CRITICAL$|DANGEROUS$|HARMLESS$}

2. ... DURATION ${SHORT$|MEDIUM$|LONG$}

Wirkung

Mit dem Zusatz FOR TESTING wird eine Klasse für die Verwendung mit ABAP Unit definiert. Eine Klasse mit dem Zusatz FOR TESTING kann diverse Zwecke haben:

  • Darstellung einer Testattrappe für die Verwendung als abhängige Komponente in Modultests. Mehr Information ist unter Managing Dependencies with ABAP Unit vorhanden.
  • Versorgung von Hilfsfunktionen (Testinfrastruktur) für das Schreiben von ABAP-Modultests.

Eine Testklasse und ihre Komponenten können deshalb nicht im produktiven Coding des Programms, sondern nur in anderen Testklassen angesprochen werden. Insbesondere muss eine Unterklasse einer Testklasse selbst eine Testklasse sein und mit dem Zusatz FOR TESTING deklariert werden. Als einzige Ausnahme von dieser Regel können Testklassen bei der Definition produktiver Klassen als Freunde angegeben werden, um das Testen privater Komponenten zu ermöglichen.

Eine lokale Testklasse kann spezielle private Methoden enthalten, die das Fixture für die Tests der Klasse implementieren. Diese Methoden haben folgende vordefinierte Namen:

  • Eine Instanzmethode setup, die vor jedem einzelnen Test bzw. vor jeder Ausführung einer Testmethode der Klasse ausgeführt wird.
  • Eine Instanzmethode teardown, die nach jedem einzelnen Test bzw. nach jeder Ausführung einer Testmethode der Klasse ausgeführt wird.
  • Eine statische Methode class_setup, die einmal vor allen Tests der Klasse ausgeführt wird.
  • Eine statische Methode class_teardown, die einmal nach allen Tests der Klasse ausgeführt wird.

Der Quelltext innerhalb einer Testklasse gehört nicht zum produktiven Quelltext des Programms und wird in Produktivsystemen nicht generiert (Steuerung über Profilparameter abap/test_generation) . Der Quelltext einer solchen Klasse zählt nicht zu den Messungen der Quelltextabdeckung.

Hinweise

  • Lokale Testklassen von Class-Pools und Funktionsgruppen sollten nur in den dafür vorgesehenen Test-Includes angelegt werden. Bei anderen Programmen sollten sie am Ende des Programms aufgeführt werden.
  • Neben den Testmethoden und den speziellen Methoden für das Fixture kann eine Testklasse auch beliebige andere Komponenten enthalten. Diese Komponenten können je nach Sichtbarkeit nur in der eigenen Testklasse oder anderen Testklassen verwendet werden. Somit können beispielsweise Hilfsmethoden für Tests definiert werden.
  • Alle für das Testen im Rahmen von ABAP Unit benötigten Komponenten sollten ausschließlich in Testklassen definiert werden, damit sie in Produktivsystemen nicht generiert und aus produktivem Quelltext nicht angesprochen werden können. Dies umfasst neben Testklassen mit Testmethoden auch Testattrappen und weitere Hilfsklassen, die keine Testmethoden enthalten.
  • Testklassen können von beliebigen anderen, insbesondere globalen, Klassen erben. Dies erlaubt die Implementierung allgemeiner globaler Tests, die in lokalen Testklassen verwendet werden können.
  • Die spezielle ABAP-Doc-Kommentar "! @Testing kann vor der Deklaration einer Testklasse stehen, um eine Testrelation für die Klasse zu definieren. Hiermit können Repository-Objekte getestet werden, die keine Testklassen unterstützen.
  • Globale Testklassen (im engeren Sinne) müssen immer den zu testenden Quelltext mit einer Testrelation definieren.
  • In Testklassen kann bei der Anweisung INTERFACES der Zusatz PARTIALLY IMPLEMENTED angegeben werden, der es erlaubt, Interfaces nur teilweise zu implementieren. Dies ist insbesondere in Testattrappen nützlich.
  • Bei einer lokalen Klasse, die im Bereich für Lokale Typen des Class-Pools einer globalen Testklasse angelegt wird, darf der Zusatz FOR TESTING nicht verwendet werden. Bei Hilfsklassen für die globale Testklasse ist der Zusatz nicht notwendig, da deren Eigenschaft Testklasse bezüglich der Generierung auf den gesamten Class-Pool wirkt. Für den seltenen Fall, dass eine globale Testklasse selbst getestet werden soll, können lokale Testklassen wie auch bei anderen globalen Klassen empfohlen im Bereich Lokale Testklassen angelegt werden.
  • Die Methoden des Fixture sind keine Testmethoden und der Zusatz FOR TESTING darf bei ihrer Deklaration nicht angegeben werden.

Zusatz 1

... RISK LEVEL ${CRITICAL$|DANGEROUS$|HARMLESS$}

Zusatz 2

... DURATION ${SHORT$|MEDIUM$|LONG$}

Wirkung

Diese Zusätze ordnen einer Testklasse Testeigenschaften zu.

  • Mit RISK LEVEL wird die Risikostufe für einen Test definiert.
  • Mit DURATION wird die erwartete Ausführungsdauer angegeben.

Während der Testausführung werden die Testeigenschaften gegen Werte geprüft, die in der Transaktion SAUNIT_CLIENT_SETUP definiert sind.

  • Die Bedeutung der Risikostufen ist wie folgt:
  • CRITICAL - Systemeinstellungen oder Customizing-Daten werden durch einen Test geändert (Standardwert)

  • DANGEROUS - persistente Daten werden durch einen Test geändert

  • HARMLESS - keine Systemeinstellungen oder persistente Daten werden durch einen Test geändert

Tests, deren Risikostufe höher ist als in der Transaktion SAUNIT_CLIENT_SETUP angegeben, werden nicht ausgeführt.
  • Die erwartete Ausführungsdauer bedeutet folgendes:
  • Mit SHORT wird eine nicht wahrnehmbare Ausführungsdauer von einigen Sekunden erwartet.

  • Mit MEDIUM wird eine wahrnehmbare Ausführungsdauer von ungefähr einer Minute erwartet.

  • Mit LONG wird eine längere wahrnehmbare Ausführungsdauer von über eine Minute erwartet.

Bei jeder dieser erwarteten Ausführungszeiten sind Obergrenzen in der Transaktion SAUNIT_CLIENT_SETUP angegeben. Diese Grenzen sind üblicherweise größer als die erwarteten Ausführungszeiten, damit Prozesse wie Kompilierungen nicht zum Test gehören. Falls ein Test die zur erwarteten Ausführungszeit zugehörigen Obergrenze überschreitet, hängt das Systemverhalten vom Ausführungsmodus des Tests und der Aktivierung oder Nichtaktivierung der ABAP-Unit-Laufzeitüberwachung. Weitere Information über den Ausführungsmodus und Laufzeitüberwachung ist in der Dokumentation zur Transaktion SAUNIT_CLIENT_SETUP oder von ABAP Unit im SAP Help Portal vorhanden.

Hinweise

  • Es soll der Unterschied zwischen der durch DURATION erwarteten Ausführungszeit und der durch die jeweilige Obergrenze in der Transaktion SAUNIT_CLIENT_SETUP erlaubten Ausführungszeit beachtet werden. Um systemabhängige Testabbrüche zu vermeiden, muss die erwartete Ausführungszeit nach eigentlicher Erwartung definiert werden und nicht nach der Obergrenze.
  • Die Zusätze RISK LEVEL und DURATION lösen die Pseudokommentare für Testklassen ab. Vorhandene Pseudokommentare werden weiterhin berücksichtigt, sollten aber nicht mehr verwendet werden.

Beispiel

Siehe das Programm DEMO_ABAP_UNIT.

  • Eine Klasse demo stellt den produktiven Teil des Quelltexts dar. Eine Methode get_sum addiert die Werte der Felder einer Zeile einer DDIC-Datenbanktabelle und weist das Ergebnis dem privaten Attribut sum zu.
  • Die Klasse test_demo ist eine Testklasse für die Klasse demo.
  • In der Methode setup wird ein Objekt von demo erzeugt und die DDIC-Datenbanktabelle mit Testdaten vorbereitet. Deswegen ist für RISK LEVEL der Zusatz DANGEROUS angegeben.

  • Die Methode test_sum ruft get_sum auf und vergleicht das private Attribut sum mit dem erwarteten Wert. Aus diesem Grund muss test_demo Freund der Klasse demo sein.

  • In der Methode teardown werden die Testdaten wieder aus der DDIC-Datenbanktabelle entfernt.

Die Testmethode wird beim Ausführen der Modultests von DEMO_ABAP_UNIT aufgerufen und sollte keinen Fehler melden.






RFUMSV00 - Advance Return for Tax on Sales/Purchases   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 14025 Date: 20240508 Time: 145941     sap01-206 ( 200 ms )