Veröffentlicht am :
Test CREATION_INTERNE

Test des mp_dirlist-Makros für die Verzeichnisauflistung

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Attention : Dieser Code erfordert Administratorrechte.
Das Skript initialisiert ein temporäres Stammverzeichnis im SAS©-Arbeitsverzeichnis und erstellt dann eine Hierarchie von Unterverzeichnissen (a, b, a/d, a/e, a/e/f) mit dem `%mf_mkdir`-Makro. Ein SAS©-Datensatz (`test.ds1`) wird im tiefsten Verzeichnis (`&root/a/e/f`) erstellt, um Inhalte zu simulieren. Mehrere Aufrufe von `%mp_dirlist` werden mit verschiedenen `maxdepth`-Parametern (MAX, 2, 0) durchgeführt, um die Fähigkeit des Makros zu testen, Verzeichnisse mit unterschiedlichen Tiefen aufzulisten. Für jeden Test verwendet das Skript die Makros `%mf_nobs`, um die Beobachtungen in den Ausgabedatensätzen von `mp_dirlist` zu zählen, und `%mp_assert`, um zu überprüfen, ob diese Zahlen den Erwartungen entsprechen. Spezifische Fälle für ein leeres Verzeichnis (`&root/b`) und ein nicht existierendes Verzeichnis (`&root/notexisting`) werden ebenfalls getestet, um die Robustheit des Makros sicherzustellen.
Datenanalyse

Type : CREATION_INTERNE


Das Skript erstellt eine temporäre Verzeichnisstruktur und einen SAS-Datensatz zu Testzwecken. Es werden keine externen Daten oder Daten aus der `SASHELP`-Bibliothek direkt für den Testprozess verwendet. Die Testdaten werden vor Ort generiert.

1 Codeblock
MACRO mf_mkdir / DATA STEP Data
Erklärung :
Dieser Codeblock initialisiert eine Makrovariable `root`, die auf ein neues Unterverzeichnis 'top' im temporären Arbeitsverzeichnis (`work`) zeigt. Anschließend wird das Makro `%mf_mkdir` mehrfach verwendet, um eine Hierarchie verschachtelter Verzeichnisse zu erstellen. Eine Libname `test` wird definiert, um auf das tiefste Verzeichnis zu zeigen. Schließlich wird ein Datensatz `ds1` in dieser Bibliothek erstellt, der als Testdaten dient.
Kopiert!
1%let root=%sysfunc(pathname(work))/top;
2%mf_mkdir(&root)
3%mf_mkdir(&root/a)
4%mf_mkdir(&root/b)
5%mf_mkdir(&root/a/d)
6%mf_mkdir(&root/a/e)
7%mf_mkdir(&root/a/e/f)
8LIBNAME test '&root/a/e/f';
9DATA test.ds1;
10 x=1;
11RUN;
2 Codeblock
MACRO mp_dirlist / MACRO mp_assert
Erklärung :
Dieser Block testet das Makro `%mp_dirlist`, indem er es anweist, alle Verzeichnisebenen unter `&root` (mit `maxdepth=MAX`) aufzulisten. Das Makro `%mf_nobs` wird verwendet, um die Beobachtungen im Ausgabedatensatz `work.myTable` zu zählen. `%mp_assert` überprüft, ob die Anzahl der Beobachtungen 6 beträgt, was der Gesamtzahl der erstellten Verzeichnisse entspricht.
Kopiert!
1%mp_dirlist(path=&root, outds=myTable, maxdepth=MAX)
2 
3%mp_assert(
4 iftrue=(%mf_nobs(work.mytable)=6),
5 desc=All levels returned,
6 outds=work.test_results
7)
3 Codeblock
MACRO mp_dirlist / MACRO mp_assert
Erklärung :
Dieser Test ruft `%mp_dirlist` mit `maxdepth=2` auf, was bedeutet, dass nur die Verzeichnisse der ersten beiden Tiefenebenen (ab `&root`) aufgelistet werden sollen. `%mp_assert` wird verwendet, um zu bestätigen, dass der Datensatz `work.myTable2` 5 Beobachtungen enthält, wodurch die Tiefenbegrenzung validiert wird.
Kopiert!
1%mp_dirlist(path=&root, outds=myTable2, maxdepth=2)
2 
3%mp_assert(
4 iftrue=(%mf_nobs(work.mytable2)=5),
5 desc=Top two levels returned,
6 outds=work.test_results
7)
4 Codeblock
MACRO mp_dirlist / MACRO mp_assert
Erklärung :
Dieser Codeblock testet `%mp_dirlist` mit `maxdepth=0`, was darauf hinweist, dass nur das angegebene Verzeichnis (`&root`) selbst zurückgegeben werden soll. `%mp_assert` überprüft, ob der Datensatz `work.myTable3` 2 Beobachtungen enthält, was das erwartete Verhalten für diese Auflistungstiefe ist (im Allgemeinen das Verzeichnis selbst plus ein Eintrag für Metadaten oder den Parent).
Kopiert!
1%mp_dirlist(path=&root, outds=work.myTable3, maxdepth=0)
2 
3%mp_assert(
4 iftrue=(%mf_nobs(work.mytable3)=2),
5 desc=Top level returned,
6 outds=work.test_results
7)
5 Codeblock
MACRO mp_dirlist / MACRO mp_assert
Erklärung :
Dieser Test validiert das Verhalten von `%mp_dirlist`, wenn es auf ein leeres Verzeichnis (`&root/b`) angewendet wird. Das Makro `%mp_assert` wird verwendet, um zu überprüfen, ob der Ausgabedatensatz `work.myTable4` keine Beobachtungen enthält, wie es für ein Verzeichnis ohne Unterverzeichnisse oder auflistbare Dateien erwartet wird.
Kopiert!
1%mp_dirlist(path=&root/b, outds=work.myTable4)
2%mp_assert(
3 iftrue=(%mf_nobs(work.mytable4)=0),
4 desc=Empty TABLE for empty directory,
5 outds=work.test_results
6)
6 Codeblock
MACRO mp_dirlist / MACRO mp_assert
Erklärung :
Der letzte Codeblock testet `%mp_dirlist` mit einem Verzeichnispfad, der nicht existiert (`&root/notexisting`). `%mp_assert` wird verwendet, um zu bestätigen, dass der Ausgabedatensatz `work.myTable5` leer ist, was darauf hinweist, dass das Makro ungültige Pfade korrekt behandelt, ohne einen Fehler zu generieren und ein leeres Ergebnis zurückzugeben.
Kopiert!
1%mp_dirlist(path=&root/notexisting, outds=work.myTable5)
2%mp_assert(
3 iftrue=(%mf_nobs(work.mytable5)=0),
4 desc=Empty TABLE for non-existing directory,
5 outds=work.test_results
6)
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. Informationen zu Copyright und Nutzungsbedingungen unter der GNU Lesser General Public License finden Sie in der beiliegenden README.md-Datei oder unter https://github.com/HMS-Analytical-Software/SASUnit/wiki/readme/.