Veröffentlicht am :
Makro CREATION_INTERNE

Überprüfung der Makro-Aufrufabfolge

Dieser Code ist auch verfügbar auf: Français English Español
Dieses interne Makro, `_checkCallingSequence`, ist eine Komponente des SASUnit-Frameworks. Seine Aufgabe ist es, die Ausführungsreihenfolge spezifischer Makroaufrufe zu validieren. Es empfängt einen Parameter `i_callerType`, der den Typ des Aufrufers ('scenario' oder 'assert') angibt.
Wenn `i_callerType` 'scenario' ist, stellt das Makro sicher, dass 'initScenario' nicht zweimal hintereinander oder innerhalb eines bereits aktiven 'testCall'- oder 'testCase'-Kontextes aufgerufen wird. Dies gewährleistet die Integrität der Testumgebung.
Wenn `i_callerType` 'assert' ist, prüft es, dass die Funktion 'Assert' nur nach der Initialisierung eines Szenarios ('initScenario') und eines Testfalls ('initTestCase') aufgerufen wird.
Bei Erkennung einer falschen Aufrufabfolge gibt das Makro eine Fehlermeldung über `%_issueErrorMessage` aus und gibt den Wert 1 zurück, was einen Fehler signalisiert. Wenn die Abfolge korrekt ist, gibt es 0 zurück. Eine Rückgabe von -1 deutet auf einen nicht erkannten Aufrufertyp hin.
Datenanalyse

Type : CREATION_INTERNE


Das Skript manipuliert ausschließlich interne globale Makrovariablen des SASUnit-Frameworks (wie `g_inScenario`, `g_inTestCase`, `g_inTestCall`, `g_currentLogger`). Es liest oder schreibt keine Daten aus traditionellen SAS-Datasets, externen Datenbanken oder Dateien.

1 Codeblock
MACRO DEFINITION
Erklärung :
Dieser Block definiert das Makro `_checkCallingSequence`. Es initialisiert die globalen Makrovariablen `g_inScenario`, `g_inTestCase` und `g_inTestCall` (falls noch nicht definiert), um den Zustand des Testkontextes zu verfolgen. Es konvertiert `i_callerType` in Kleinbuchstaben für einen nicht-sensitiven Vergleich. Bedingte `%if/%then/%do`-Strukturen werden verwendet, um den `l_callerType` zu bewerten.

- Wenn `l_callerType` 'scenario' ist, prüft das Makro, dass die Szenario-Initialisierung nicht doppelt oder in einem bereits aktiven `TestCall`- oder `TestCase`-Kontext erfolgt. Werden diese Bedingungen verletzt, wird eine Fehlermeldung generiert und das Makro gibt 1 zurück.
- Wenn `l_callerType` 'assert' ist, stellt das Makro sicher, dass der Assertionsaufruf in einem aktiven Szenario (`g_inScenario = 1`) und Testfall (`g_inTestCase = 1`) erfolgt. Bei Nichteinhaltung wird eine Fehlermeldung ausgegeben und das Makro gibt 1 zurück.

In beiden Fällen, wenn die Abfolge korrekt ist, gibt das Makro 0 zurück. Eine Rückgabe von -1 wird für einen nicht unterstützten `i_callerType` verwendet. Das Makro `_issueErrorMessage` (hier nicht definiert, aber im Framework angenommen) wird für die Fehlerbehandlung verwendet.
Kopiert!
1/**
2 \file
3 \ingroup SASUNIT_UTIL
4 
5 \brief check for correct calling sequence
6 
7 \version \$Revision$
8 \author \$Author$
9 \date \$Date$
10
11 \sa For further information please refer to https://github.com/HMS-Analytical-Software/SASUnit/wiki/User%27s%20Guide/
12 Here you can find the SASUnit documentation, release notes and license information.
13 \sa \$HeadURL$
14 \copyright Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de
15 This file is part of SASUnit, the Unit testing framework for SAS(R) programs.
16 For copyright information and terms of usage under the GNU Lesser General Public License see included file README.md
17 or https://github.com/HMS-Analytical-Software/SASUnit/wiki/readme/.
18
19 \param i_callerType Type of macro calling (scenario, asssert)
20 
21*/
22/** \cond */
23%MACRO _checkCallingSequence(i_callerType =);
24 
25 %global g_inScenario g_inTestCase g_inTestCall;
26
27 %let l_callerType = %lowcase (&i_callerType.);
28 
29 %IF (&l_callertype.=scenario) %THEN %DO;
30 %IF (&g_inScenario. = 1) %THEN %DO;
31 %_issueErrorMessage(&g_currentLogger.,_checkCallingSequence: initScenario must not be called twice!)
32 1
33 %RETURN;
34 %END;
35 %IF (&g_inTestCall. = 1) %THEN %DO;
36 %_issueErrorMessage(&g_currentLogger.,_checkCallingSequence: initScenario must not be called within a test call!)
37 1
38 %RETURN;
39 %END;
40 %IF (&g_inTestcase. = 1) %THEN %DO;
41 %_issueErrorMessage(&g_currentLogger.,_checkCallingSequence: initScenario must not be called within a test case!)
42 1
43 %RETURN;
44 %END;
45 0
46 %RETURN;
47 %END;
48 %IF (&l_callertype.=assert) %THEN %DO;
49 %IF (&g_inScenario. = 0) %THEN %DO;
50 %_issueErrorMessage(&g_currentLogger.,_checkCallingSequence: Assert must be called after initScenario!)
51 1
52 %RETURN;
53 %END;
54 %IF (&g_inTestcase. = 0) %THEN %DO;
55 %_issueErrorMessage(&g_currentLogger.,_checkCallingSequence: Assert must be called after initTestCase!)
56 1
57 %RETURN;
58 %END;
59 0
60 %RETURN;
61 %END;
62 -1
63%MEND _checkcallingSequence;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. Diese Datei ist Teil von SASUnit, dem Unit-Test-Framework für SAS(R)-Programme.