Publié le :
Macro CREATION_INTERNE

Tests unitaires pour la macro SUBSTRING

La macro `%test_substring` est conçue pour tester une implémentation de la fonction de sous-chaîne. Elle utilise la macro `%assertEqual` (supposée être définie ailleurs) pour comparer les résultats attendus avec les résultats obtenus par `%substring` pour différentes combinaisons de chaînes sources, de positions de début et de fin. Les tests incluent des extractions de sous-chaînes standard, des cas où la position de début ou de fin est 0, des positions de début ou de fin négatives (pour extraire depuis la fin de la chaîne), et des cas impliquant des caractères multibytes (comme '汉字'). Elle couvre des scénarios de base et des cas limites pour assurer la robustesse de la fonction testée.
Analyse des données

Type : CREATION_INTERNE


Les données utilisées pour les tests sont des chaînes de caractères littérales définies directement dans la macro `%test_substring` via des instructions `%let`. Aucune lecture de fichier externe ou de bibliothèque SAS n'est effectuée. Toutes les variables sont créées et manipulées en mémoire pour les besoins du test.

1 Bloc de code
MACRO %test_substring
Explication :
Ce bloc définit la macro `%test_substring` qui contient une série d'appels à des fonctions de test. Chaque appel initialise une chaîne source, une position de début et de fin via des instructions `%let`, puis utilise `%assertEqual` (une macro de test externe) pour vérifier que le résultat de `%substring` correspond à la valeur attendue. La macro teste divers scénarios de découpage de chaînes, y compris des cas limites, des valeurs négatives pour les positions (indiquant un comptage depuis la fin de la chaîne) et la gestion des caractères multibytes. Le paramètre `msg` dans `%assertEqual` fournit un message descriptif pour chaque test.
Copié !
1%macro test_substring;
2 
3 %let SOURCE=abc;
4 %let start=1;
5 %let END=2;
6 %assertEqual(a=%str(ab),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
7 
8 %let SOURCE=%str(abcdefghijk);
9 %let start=3;
10 %let END=6;
11 %assertEqual(a=%str(cdef),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
12 
13 %let SOURCE=%str(abcdefghijk);
14 %let start=0;
15 %let END=0;
16 %assertEqual(a=%str(),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
17 
18 %let SOURCE=%str(abcdefghijk);
19 %let start=0;
20 %let END=1;
21 %assertEqual(a=%str(a),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
22 
23 %let SOURCE=%str(abcdefghijk);
24 %let start=;
25 %let END=-2;
26 %assertEqual(a=%str(abcdefghij),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
27 
28 %let SOURCE=%str(abcdefghijk);
29 %let start=-4;
30 %let END=-2;
31 %assertEqual(a=%str(hij),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
32 
33 %let SOURCE=%str(abcdefghijk);
34 %let start=4;
35 %let END=2;
36 %assertEqual(a=%str(dcb),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
37 
38 %let SOURCE=%str(abcdefghijk);
39 %let start=-2;
40 %let END=2;
41 %assertEqual(a=%str(jihgfedcb),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
42 
43 %let SOURCE=%str(ab cd ef gh ij k);
44 %let start=3;
45 %let END=7;
46 %assertEqual(a=%str( cd e),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
47 
48 %let SOURCE=%str(abcdef);
49 %let start=0;
50 %let END=0;
51 %assertEqual(a=%str(),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
52 
53 %let SOURCE=%str(ab 汉字 cdef 测试);
54 %let start=4;
55 %let END=5;
56 %assertEqual(a=%str(汉字),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
57 
58 %let SOURCE=%str(ab 汉字 cdef 测试);
59 %let start=5;
60 %let END=4;
61 %assertEqual(a=%str(字汉),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
62 
63 %let SOURCE=%str(ab 汉字 cdef 测试);
64 %let start=-1;
65 %let END=1;
66 %assertEqual(a=%str(试测 fedc 字汉 ba),b=%substring(&SOURCE,&start,&END),msg=%quote(substring(&SOURCE,&start,&END)));
67 
68%mend;
2 Bloc de code
APPEL MACRO %test_substring
Explication :
Ce bloc exécute la macro `%test_substring`. L'exécution de cette macro lance l'ensemble des tests prédéfinis pour la fonction `%substring`, vérifiant son comportement pour les différents cas spécifiés dans sa définition.
Copié !
1%test_substring;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« La mise en œuvre de tests unitaires pour une macro-fonction comme %substring est une excellente pratique, souvent négligée dans le développement SAS traditionnel. Cette approche garantit non seulement que la logique métier est respectée, mais elle assure également la non-régression lors de futures optimisations ou montées de version. »