Les tests unitaires pour les applications JSL peuvent être réalisés avec le script du pilote GUI JSL-Unit (c'est-à-dire RunJSL_Unit.jsl) et un ensemble de scripts et de tables de tests unitaires. Les scripts et tables de tests unitaires sont les fichiers JSL et JMP dans le répertoire tests (ou l'un de ses sous-répertoires) avec le préfixe test (par exemple test géométrique moyenne.jsl). Le pilote définit une fonction ut assert, que chaque test unitaire doit appeler pour chaque scénario de test. Le prototype de ut assert est :
ut assert(expression, expectedvalue <,stresscase="N">)
Le premier argument est une expression qui, une fois évaluée, donne la valeur réelle du scénario de test et le deuxième argument est la valeur attendue du scénario de test. Notez que l'expression et la valeur attendue sont des arguments obligatoires mais que stresscase est facultatif, avec une valeur par défaut de N. L'argument stresscase est destiné aux cas de test qui peuvent être considérés comme des événements rares et sont susceptibles d'entraîner un échec et peuvent donc être contournés pour les exécutions de tests typiques.
Remarque : Le pilote GUI fournit une case à cocher qui, lorsqu'elle est cochée, inclut les cas de tests de résistance.
Les résultats des tests numériques sont comparés à l'aide d'un epsilon pour représenter la variation acceptable (c'est-à-dire comparaison floue). Il existe deux valeurs epsilon, un epsilon absolu est utilisé lorsque le résultat attendu est 0 et un epsilon relatif est utilisé pour tous les autres cas. Les valeurs epsilon sont réinitialisées aux valeurs par défaut avant d'exécuter chaque script de test. Il s'agit de variables globales qu'un script de test peut écraser s'il le souhaite.
ut zero epsilon = 1e-12; // close enough when expected is 0
ut relative epsilon = 1e-9; // close enough relative to expected value
Les détails de l'exécution sont écrits dans le journal. Pour les échecs, le résultat réel et attendu, ainsi que le LRE (pour les tests numériques uniquement) sont rapportés. LRE est un acronyme qui fait référence au logarithme (base 10) de l'erreur relative (c'est-à-dire -log10(abs(q - c)/abs(c)).
Remarque : Il existe également une variante ut assert appelée mais affirmer des chiffres lorsque vous souhaitez configurer epsilon à la volée pour tester un nombre spécifié de chiffres de précision. Il ajoute un troisième argument qui est le nombre de chiffres de précision requis. Ceci est particulièrement utile lorsque la valeur attendue n'est fournie que pour un certain nombre de chiffres. Par exemple,
ut assert digits(Expr(Sqrt(2)), 1.414, 4); // is sqrt(2) accurate to 4 digits
ut assert digits(Expr(Pi()), 3.14159, 6); // is pi() accurate to 6 digits
Mais assert digits fournit également l'argument du cas de stress comme quatrième argument facultatif. Pour les tableaux de données de test, les valeurs epsilon doivent être stockées en tant que variables de tableau et utilisées dans le calcul du résultat réussite/échec.
Cela ressemble exactement à ce que je cherchais, pour déboguer un script JSL de plus de 5 000 lignes. Hâte de l'essayer.Merci!