Makros

Überblick

In den Methoden der ETEST-Objekte sind spezifische Makros verfügbar. Sie können diese Makros zur Steuerung der Testausführung und Bestimmung des Ergebnisses eines Testfalls heranziehen.

Makros werden auf dieselbe Weise wie Methoden aufgerufen. Im Gegensatz zu einem Funktionsaufruf kann ein Makroaufruf in die Variablen der aufrufenden Methode schreiben und eine Rückkehr der aufrufenden Methode auslösen.

Makros sind in folgenden Methoden von Testfällen und Test-Ressourcen zulässig:

  • Prepare

  • Execute

  • CleanUp

Sie können Makros ebenfalls in Methoden verwenden, die über ASSERT_SUBMETHOD aufgerufen werden.

HINWEIS: Die Verwendung von Makros in anderen Methoden von Testfällen und Test-Ressourcen kann zu Fehlern führen. Insbesondere dürfen Makros nicht in der Methode Finalize verwendet werden.

Makros in anderen Objekten haben keinerlei Wirkung. Das wird in einer Meldung in der Ansicht Meldungen ausgewiesen.

Makros in the Methoden von Testfällen und Test-Ressourcen

In den Methoden von Testfällen und Test-Ressourcen können folgende Makros verwendet werden:

Aufgerufenes Makro

Beschreibung

ASSERT(condition)

FALSE: Die Ausführung wurde nicht erfolgreich abgeschlossen.

TRUE: Die Ausführung wurde erfolgreich abgeschlossen.

ASSERT(condition, message)

FALSE: Die Ausführung wurde nicht erfolgreich abgeschlossen.

TRUE: Die Ausführung wurde erfolgreich abgeschlossen.

Als Ergebnis wird die Diagnosemeldung message angezeigt.

ASSERT_INCONCLUSIVE(condition, message)

FALSE: Das Testergebnis ist nicht eindeutig.

Das Testergebnis ist nicht eindeutig, um darauf zu verweisen, dass ein Test nicht ausgeführt werden konnte. Die Ursache hierfür kann darauf zurückzuführen sein, dass ein für den Test erforderliches Hardwaregerät im Testsystem nicht zur Verfügung steht.

TRUE: Die Testausführung wurde erfolgreich abgeschlossen.

ASSERT_SUBMETHOD(method_call(i_xFirstCall, i_ifErrorLogger))

Über Method_call können Methoden aufgerufen werden, die wiederum Makros verwenden können, um den Steuerungsfluss der aufrufenden Methode zu beeinflussen.

FALSE: Beim Aufrufen der Methode wurde eine Fehler erkannt.

Das Makro ASSERT in einer Methode, das über ein als FALSE eingestuftes Makro ASSERT_SUBMETHOD aufgerufen wurde, hat dieselbe Wirkung wie ein ASSERT-Makro, das direkt in der aufrufenden Methode als FALSE eingestuft wurde,

Im Gegensatz dazu hat ein Makro ASSERT in einer Methode, das ohne Verwendung des ASSERT_SUBMETHOD-Makros aufgerufen wurde, keinerlei Wirkung auf die aufrufende Methode.

Bei Verwendung des Makros ASSERT_SUBMETHOD ist sicherzustellen, dass Sie die genaue Syntax für die Parameterdeklaration und den Rückgabetyp verwenden (siehe ebenfalls Beispiel 2).

  • Deklarieren Sie i_ifErrorLogger in der Submethode in Übereinstimmung mit der Methode Execute.

  • Deklarieren und verwenden Sie den Rückgabetyp ET_TestReturn in der Submethode in Übereinstimmung mit der Methode Execute.

  • i_ifErrorLogger muss in ebenfalls in die Submethode übertragen werden.

TEST_DONE()

Die Ausführung des Tests wurde erfolgreich (ohne Fehler) abgeschlossen. Ein einfaches RETURN beendet nur den aktuellen Zyklus. Die Methode wird dann im nächsten Zyklus erneut aufgerufen.

Makros zum Beenden der Ausführung von Methoden

Die Methoden Prepare, Execute und CleanUp eines Testfalls oder einer Test-Ressource werden zyklische aufgerufen, bis ein ASSERT-Makro als FALSE eingestuft oder ein TEST_DONE-Makro aufgerufen wird. Beim Aufruf eines TEST_DONE oder bei der Einstufung eines ASSERT als FALSE wird die Ausführung der Methode angehalten und die restliche Ausführung verworfen.

Wenn...

Dann...

die Ausführung eines Test mit TEST_DONE beendet wird,

wurde der Test erfolgreich abgeschlossen.

eine Aussage in der Methode Execute oder Prepare als FALSE eingestuft wird,

wurde der Testfall nicht erfolgreich abgeschlossen.

HINWEIS: Wenn eine Aussage in der Methode CleanUp als FALSE eingestuft wird, dann wird die Ausführung des Tests gestoppt. Das wird als Fehler bei der Initialisierung bzw. Deinitialisierung eingeordnet. In Logic Builder wird eine entsprechende Meldung angezeigt. Die Meldung verweist darauf, dass der Test abgebrochen wurde und die Steuerung zurückgesetzt werden muss.

Beispiel 1

Im folgenden Programmcodebeispiel werden die Makros ASSERT und TEST_DONE im Implementierungsteil der Methode Execute verwendet.

diResult := MyAdditionFunction(4, 3);
ASSERT(diResult = 7,  'MyAdditionFunction addition result not correct');
TEST_DONE();

Beispiel 2

Im folgenden Programmcodebeispiel werden die Makros ASSERT und TEST_DONE für den Test der Funktion my_add (einfach Addition) verwendet.

Im Testfall wurde eine Methode TestMyAdd erstellt. Die Methode wird mehrmals von der Methode Execute des Testfalls für den Test der Funktion my_add unter verschiedenen Grenzbedingungen und mit unterschiedlichen Parametern aufgerufen.

(* Methode Execute *)
(* Declaration part*)
METHOD Execute : PD_ETest.ET_TestReturn
VAR_INPUT
   i_xFirstCall : Bool;
   i_ifErrorLogger : PD_ETest.IF_ErrorLogger;
END_VAR
VAR_OUTPUT
   q_rProgress : REAL;
   q_sState . STRING[255];
END_VAR
VAR
END_VAR
(* Implementation part*)
ASSERT_SUBMETHOD (TestMyAdd(12, 2, 14, i_ifErrorLogger));
ASSERT_SUBMETHOD (TestMyAdd(12, 3, 15, i_ifErrorLogger));
ASSERT_SUBMETHOD (TestMyAdd(12, 4, 16, i_ifErrorLogger));
TEST_DONE();
 
(* Submethod TestMyAdd *)
(* Declaration part *)
METHOD TestMyAdd : PD_ETest.ET_TestReturn
VAR_INPUT
   i_a : INT;
   i_b : INT;
   i_result : INT;
   i_ifErrorLogger : PD_ETest.IF_ErrorLogger;
END_VAR
VAR
   iResult : INT;
END_VAR
(* Implementation part *)
iResult : my_add(i_a, i_b);
ASSERT(iresult = i_result);
 
(* Function my_add *)
(* Declaration part *)
FUNCTION my_add : INT
VAR_INPUT
   a : INT;
   b : INT;
END_VAR
VAR
END_VAR
(* Implementation part *)
iResult : my_add := a + b;