使用测试框架
TestCreate 仅创建测试,而不立即运行它:
如要运行测试,可以使用 TestEvaluate:
因为 TestCreate 不对测试进行实际运算,所以创建测试是一个快速操作:
你可以考虑使用 ParallelMap 对长时间的测试运行进行加速:
在使用 TestCreate 创建测试时,不会运算输入表达式中包含的符号. 考虑以下测试:
为了避免全局依赖性,您可以使用例如 With 将值注入到测试中:
如果 IntermediateTest 失败,外部测试也会失败,因此您仍然会获得测试的单个总体结果. 您可以检查外部测试中的 IntermediateTest 结果,以查看外部测试的哪些步骤有效,哪些步骤失败.
TestReport 是一个具有多种用途的单一函数.
使用 TestReport 运行测试
TestReport 可用于运行多个测试:
使用 TestReport 合并测试结果
TestReport 在合并结果时会自动删除重复项:
使用 TestReport 收集测试而不进行运算
当对文件运行 TestReport 时,默认情况下会执行所有未运算的测试:
现在可以通过释放 HoldForm 来创建测试对象:
记录 TestReport 正在执行的操作对于调试代码至关重要. 创建一个运行时间较长的测试套件,该套件可能在运行过程中的某个时刻失败:
您可以使用 HandlerFunctions 来实时记录所有失败的测试:
为 TestReport 编写测试文件通常是一个简单的操作. 只需将任何所需的上下文在测试文件的开头加载即可:
Needs["MyContext`"]
TestCreate[MyContext`AddOne[1], 2, TestID -> "MyContext-AddOne-Test"]
TestCreate[MyContext`AddTwo[1], 3, TestID -> "MyContext-AddTwo-Test"]
所有未包含在 TestCreate 中的代码将在每次加载测试文件时执行,即使您未运行测试. 测试文件可以包含测试列表或以编程方式创建测试的表达式:
Needs["MyContext`"]
Table[
TestCreate[
MyContext`AddOne[i],
i+1,
TestID-> "MyContext-AddOne-" <> IntegerString[i]
],
{i, 1, 20}
]
为每个测试分配一个有意义的 TestID 始终是一个良好的习惯.