【发布时间】:2016-01-24 23:24:21
【问题描述】:
我的 python 代码正在执行相当复杂的数值计算,在许多情况下,我无法提供已知的解决方案来启用单元测试(尤其是对于中间结果)。
但是,我发现通过使用以下工作流程执行回归测试,我可以用鼻子捕捉到很多错误:
编写测试代码解决一些比较小的问题
运行一次,检查结果(通常以 matplotlib 图的形式),并通过与分析结果或其他数值软件或物理直觉进行比较来确定结果在可接受的数值精度范围内是正确的。
将生成的 numpy 数组保存到文本文件中作为参考(FWIW 我避免使用 numpy 的保存例程作为 this bug 的解决方法,但由于这已在发布版本中修复,我认为我可以使用它们现在)。
测试代码执行计算,并与使用numpy的
assert_allclose从文件中读取的参考数据进行比较。
测试函数的编写方式是默认执行测试,但是通过传递参数的非默认值,我可以绘制结果并在必要时覆盖参考文件。参考文件已签入 git,因此在不注意的情况下意外覆盖测试值的风险很小。
但是,我发现自己编写了很多样板代码来实现上述功能,这超过了实际的测试代码本身。清理它会更容易增加测试覆盖率。
是否有一些 Python 测试框架或鼻子插件可以轻松自动化上述工作流程?
【问题讨论】:
标签: python numpy testing numerical-methods nose