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 脚本的东西。 很高兴尝试一下。谢谢你!