JSL 應用程式的單元測試可以使用 JSL-Unit GUI 驅動程式腳本(即 RunJSL_Unit.jsl)和一組單元測試腳本和表格來完成。 單元測試腳本和表格是tests 目錄(或其子目錄之一)中帶有前綴test 的JSL 和JMP 檔案(例如test Geometric Mean.jsl)。 驅動程式定義了一個 utassert 函數,每個單元測試都應該為每個測試案例呼叫該函數。 utassert 的原型是:
ut assert(expression, expectedvalue <,stresscase="N">)
第一個參數是一個表達式,在計算時計算結果為測試案例的實際值,第二個參數是測試案例的預期值。 請注意,表達式和預期值是必需參數,但stresscase是可選的,預設值為N。 stresscase 參數適用於那些可能被視為罕見事件並可能導致失敗的測試案例,因此在典型的測試運行中可能會被繞過。
注意:GUI 驅動程式提供了一個複選框,選中該複選框後,將包含壓力測試案例。
使用 epsilon 來比較數值測試結果以表示可接受的變化(即模糊比較)。 有兩個 epsilon 值,當預期結果為 0 時使用絕對 epsilon,而在所有其他情況下使用相對 epsilon。 在執行每個測試腳本之前,epsilon 值會重設為預設值,而這些是測試腳本可以根據需要覆寫的全域變數。
ut zero epsilon = 1e-12; // close enough when expected is 0
ut relative epsilon = 1e-9; // close enough relative to expected value
運行詳細資訊將寫入日誌。 對於失敗,會報告實際結果和預期結果以及 LRE(僅適用於數字測試)。 LRE 是一個縮寫詞,指的是相對誤差的對數(以 10 為底)(即 -log10(abs(q - c)/abs(c))。
注意:還有一個 ut 斷言變體,稱為ut 斷言數字當您想要動態設定 epsilon 來測試指定位數的精確度。 它添加了第三個參數,即所需精度的位數。 當預期值僅提供給特定位數時,這尤其有用。 例如,
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
utassertdigits 也提供了重音情況參數作為第四個可選參數。 對於測試資料表,epsilon 值應儲存為表變數並用於計算通過/失敗結果。
這看起來正是我一直在尋找的用於調試 5000 多行 JSL 腳本的東西。 很高興嘗試一下。謝謝你!