Il test unitario per le applicazioni JSL può essere eseguito con lo script del driver GUI JSL-Unit (ad esempio RunJSL_Unit.jsl) e una serie di script e tabelle di test unitario. Gli script e le tabelle dei test unitari sono quei file JSL e JMP nella directory tests (o una delle sue sottodirectory) con il prefisso test (ad esempio test geometric mean.jsl). Il driver definisce una funzione ut assert, che ogni unit test dovrebbe chiamare per ogni caso di test. Il prototipo di ut assert è:
ut assert(expression, expectedvalue <,stresscase="N">)
Il primo argomento è un'espressione che, quando valutata, restituisce il valore effettivo del test case e il secondo argomento è il valore atteso del test case. Tieni presente che espressione e valore atteso sono argomenti obbligatori ma stresscase è facoltativo, con un valore predefinito pari a N. L'argomento del caso di stress è inteso per quei casi di test che possono essere considerati eventi rari e che potrebbero provocare un fallimento e quindi potrebbero essere ignorati per le esecuzioni di test tipiche.
Nota: il driver GUI fornisce una casella di controllo che, se selezionata, include casi di stress test.
I risultati numerici del test vengono confrontati utilizzando un epsilon per rappresentare la variazione accettabile (ovvero confronto fuzzy). Esistono due valori epsilon, un epsilon assoluto viene utilizzato quando il risultato atteso è 0 e un epsilon relativo viene utilizzato per tutti gli altri casi. I valori epsilon vengono reimpostati sui valori predefiniti prima di eseguire ciascuno script di test e queste sono variabili globali che uno script di test può sovrascrivere se lo si desidera.
ut zero epsilon = 1e-12; // close enough when expected is 0
ut relative epsilon = 1e-9; // close enough relative to expected value
I dettagli della corsa vengono scritti nel registro. Per i fallimenti vengono riportati il risultato effettivo e quello atteso, più l'LRE (solo per i test numerici). LRE è un acronimo che si riferisce al logaritmo (in base 10) dell'errore relativo (ovvero -log10(abs(q - c)/abs(c)).
Nota: esiste anche una variante ut assert chiamata ut affermare cifre per quando si desidera impostare epsilon al volo per verificare un numero specificato di cifre di precisione. Aggiunge un terzo argomento che è il numero di cifre di precisione richieste. Ciò è particolarmente utile quando il valore previsto viene fornito solo a un certo numero di cifre. Per esempio,
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 fornisce anche l'argomento stress case come quarto argomento facoltativo. Per le tabelle dei dati di test, i valori epsilon devono essere memorizzati come variabili di tabella e utilizzati nel calcolo del risultato pass/fail.
Sembra proprio quello che stavo cercando, per il debug di uno script JSL di oltre 5000 righe. Sono entusiasta di provarlo.Grazie!