Unit-Tests für JSL-Anwendungen können mit dem JSL-Unit-GUI-Treiberskript (z. B. RunJSL_Unit.jsl) und einer Reihe von Unit-Test-Skripten und -Tabellen durchgeführt werden. Bei den Unit-Test-Skripten und -Tabellen handelt es sich um die JSL- und JMP-Dateien im Tests-Verzeichnis (oder einem seiner Unterverzeichnisse) mit dem Präfix test (z. B. test geometrischer Mittelwert.jsl). Der Treiber definiert eine ut-assertion-Funktion, die jeder Unit-Test für jeden Testfall aufrufen sollte. Der Prototyp für ut Assert ist:
ut assert(expression, expectedvalue <,stresscase="N">)
Das erste Argument ist ein Ausdruck, der bei seiner Auswertung den tatsächlichen Wert des Testfalls ergibt, und das zweite Argument ist der erwartete Wert des Testfalls. Beachten Sie, dass Ausdruck und erwarteter Wert erforderliche Argumente sind, Stresscase jedoch optional ist und den Standardwert N hat. Das Stresscase-Argument ist für Testfälle gedacht, die als seltene Ereignisse gelten und wahrscheinlich zu einem Fehler führen und daher für typische Testläufe umgangen werden können.
Hinweis: Der GUI-Treiber stellt ein Kontrollkästchen bereit, das, wenn es aktiviert ist, Stresstestfälle einschließt.
Numerische Testergebnisse werden mithilfe eines Epsilons verglichen, um die akzeptable Variation darzustellen (dh Fuzzy-Vergleich). Es gibt zwei Epsilon-Werte: Ein absolutes Epsilon wird verwendet, wenn das erwartete Ergebnis 0 ist, und ein relatives Epsilon wird in allen anderen Fällen verwendet. Die Epsilon-Werte werden vor der Ausführung jedes Testskripts auf die Standardwerte zurückgesetzt. Dabei handelt es sich um globale Variablen, die ein Testskript bei Bedarf überschreiben kann.
ut zero epsilon = 1e-12; // close enough when expected is 0
ut relative epsilon = 1e-9; // close enough relative to expected value
Ausführungsdetails werden in das Protokoll geschrieben. Bei Fehlern werden das tatsächliche und das erwartete Ergebnis sowie die LRE (nur für numerische Tests) gemeldet. LRE ist ein Akronym, das sich auf den Logarithmus (Basis 10) des relativen Fehlers bezieht (dh -log10(abs(q - c)/abs(c)).
Hinweis: Es gibt auch eine ut-assert-Variante namens ut behaupten Ziffern für den Fall, dass Sie Epsilon im laufenden Betrieb festlegen möchten, um die Genauigkeit einer bestimmten Anzahl von Stellen zu testen. Es fügt ein drittes Argument hinzu, nämlich die Anzahl der erforderlichen Genauigkeitsstellen. Dies ist besonders nützlich, wenn der erwartete Wert nur für eine bestimmte Anzahl von Stellen bereitgestellt wird. Zum Beispiel,
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
ut Assert Digits stellt außerdem das Stress-Case-Argument als viertes, optionales Argument bereit. Für Testdatentabellen sollten Epsilon-Werte als Tabellenvariablen gespeichert und zur Berechnung des Pass/Fail-Ergebnisses verwendet werden.
Dies scheint genau das zu sein, wonach ich gesucht habe, um ein JSL-Skript mit mehr als 5000 Zeilen zu debuggen. Ich freue mich darauf, es auszuprobieren.Danke schön!