Show TOC

Verwendung von Bedingungen in ModultestsLocate this document in the navigation structure

Verwendung

Bei Modultests mit Bedingungen (oder Constraints) wird geprüft, ob die durch getestete Module geänderten oder erzeugten Datenobjekte bestimmte Kriterien erfüllen.

Sie können viele Bedingungen mit direkt einsetzbaren Methoden der Klasse CL_ABAP_UNIT_ASSERT testen.

Beispielsweise können Sie mit den Methoden von CL_ABAP_UNIT_ASSERTüberprüfen, ob das Ergebnis eines getesteten Moduls ein Wert zwischen 1 und 10 ist. Auch lässt sich feststellen, ob das Ergebnis eine gebundene Referenz auf eine ABAP-Klasse ist.

In einigen Modultests jedoch müssen Sie unter Umständen mehrere Bedingungen in einer logischen Relation auf ein Datenobjekt anwenden. Es kann auch sein, dass Sie eigene anwendungsspezifische Bedingungen auf ein Datenobjekt anwenden müssen.

Sie können eigene Bedingungen wie folgt zu Modultest hinzufügen:

  • Neue Bedingung implementieren: Sie können neue Bedingungen, die noch nicht in CL_ABAP_UNIT_ASSERT implementiert sind, ausdrücken, indem Sie eine Klasse erzeugen und verwenden, die IF_CONSTRAINT implementiert.

  • Mehrere Bedingungen in einer logischen Relation anwenden: Sie können CL_AUNIT_CONSTRAINTS in Ihren Testmethoden verwenden, um logischen Operationen auf das Testen von Bedingungen anzuwenden. Beispielsweise können Sie festlegen, dass eine von zwei Bedingungen in einer XOR-Relation (exklusives Oder) auf ein getestetes Datenobjekt zutreffen muss.

Sie können eine einzelne Bedingung (Instanz einer IF_CONSTRAINT-Klasse) oder mehrere (durch CL_AUNIT_CONSTRAINTS verbundene) Bedingungen gegen ein Datenobjekt mit der Methode ASSERT_THAT von CL_ABAP_UNIT_ASSERT testen.

Der Parameter EXP von ASSERT_THAT erwartet eine Instanz einer Klasse, die IF_CONSTRAINT implementiert.

Mehrere Bedingungen anwenden

Sie können in einer logischen Relation wie folgt auf mehrere Bedingungen testen:

  1. Geben Sie die Gruppe der Bedingungen mit Klassen an, die das Interface IF_CONSTRAINT implementieren.

    Prüfen Sie, ob das getestete Datenobjekt die Bedingung in der Methode IS_VALID erfüllt.

    Geben Sie eine Beschreibung der Bedingung in der Methode GET_DESCRIPTION zurück.

  2. Erzeugen Sie Instanzen der Bedingungsklassen in Ihrer Modultestmethode.

  3. Übergeben Sie die Instanzen der Klassen IF_CONSTRAINT an die entsprechende statische Methode von CL_AUNIT_CONSTRAINTS in Ihrer Testmethode. Folgende Methoden sind möglich:

    • AND: Alle von bis zu vier Bedingungen (ausgedrückt durch Instanzen von F_CONSTRAINTS-Klassen in ihren IS_VALID-Methoden) müssen erfüllt sein, damit der Test erfolgreich ist.

    • NAND: Mindestens eine und bis zu drei von vier möglichen Bedingungen muss erfüllt sein, damit der Test erfolgreich ist.

    • NOR: Keine von bis zu vier möglichen Bedingungen muss erfüllt sein, damit der Test erfolgreich ist.

    • NOT: Die angegebene Einzelbedingung darf nicht erfüllt sein, damit der Test erfolgreich ist.

    • OR: Eine beliebige von bis zu vier Bedingungen muss erfüllt sein, damit der Test erfolgreich ist.

    • XOR: Eine von zwei Bedingungen muss erfüllt sein, damit der Test erfolgreich ist.

  4. Übergeben Sie das in Schritt 3 zurückgegebene Objekt IF_CONSTRAINT an CL_ABAP_UNIT_ASSERT=>ASSERT_THAT als Argument für den Parameter EXP. EXP drückt die Bedingungen aus, die das getestete Datenobjekt im Parameter ACT erfüllen muss.

    Die Methode ASSERT_THAT verwendet die Methoden IF_CONSTRAINT~ IS_VALID der Instanzen, um zu testen, ob ein Datenobjekt den festgelegten Bedingungen entspricht.

    Je nach Testergebnis meldet die Methode ASSERT_THAT, ob ein Modultest fehlgeschlagen ist oder nicht.

    Wenn Sie eine Einzelbedingung testen möchten, können Sie Schritt 3 oben überspringen und Ihre Instanz IF_CONSTRAINT direkt an die Methode ASSERT_THATübergeben. Die Methode ASSERT_THAT verwendet die Methode IS_VALID in der Instanz, um zu prüfen, ob die Bedingung erfüllt ist.

    DATA:
    
      constraint_1 TYPE REF TO cl_implements_if_constraint,
      constraint_2 TYPE REF TO cl_implements_if_constraint,
      compound_constraint TYPE REF TO if_constraint.
    
    CREATE OBJECT constraint_1 
      EXPORTING condition_1 = <value_to_test>
    
    CREATE OBJECT constraint_2
      EXPORTING condition_1 = <value_to_test>
    
    ... < call to method under test >
    
    compound_constraint = cl_aunit_constraint=>and( 
     c1 = constraint_1       
     c2 = constraint_2 ).
    
    cl_abap_unit_assert=>assert_that(
      act = < data object to check >
      exp = compound_constraint ).
    
                      

Eigene Bedingung implementieren

Um Ihre eigene IF_CONSTRAINT-Klasse zu implementieren, müssen Sie folgende Schritte ausführen:

  • Stellen Sie alle Parameter, wie erforderliche Integer- oder Zeichenwerte, im Konstruktor Ihrer Klasse bereit. Der Konstruktor sollte die Werte als Attribute Ihrer Klasse sichern.

  • Testen Sie in der Methode IF_CONSTRAINT~IS_VALID, ob ein Datenobjekt Ihre Bedingung(en) erfüllt. Das Datenobjekt wird dieser Methode als Eingabeparameter bereitgestellt.

  • Stellen Sie einen Nachrichtentext zur Verfügung, der das Testergebnis im Modultest mit der Methode IF_CONSTRAINT~GET_DESCRIPTION beschreibt.