主要观点:过去几年我们实验室的人员成为快照测试的信徒,它简单且适合将文本转换为其他文本的程序,此方法广泛但常未被命名,本文介绍其理念和尝试的原因,还展示了实验室构建的简单快照测试工具 Turnt 及其用法。
关键信息:
- 快照测试是成对的输入和输出文件,放入版本控制,适用于编译器等类似程序,能减少写测试的繁琐。
- Turnt 可安装使用,通过
turnt.toml
配置要运行的命令,如command = "wc < {filename}"
,用--save
生成输出文件,--diff
查看差异。 - 快照测试的便捷性换来“规格”脆弱,需依赖人工审查,
-p
可用于交互式执行测试命令,Turnt 还支持多种功能如收集多个输出文件等。 - 快照测试哲学强调易添加新测试、手动审查更改代价小、SUT 为 Unix 工具及测试可作文档等。
重要细节: - 以测试 Unix
wc
命令为例,创建hi.t
输入文件和hi.out
输出文件,turnt
可测试输入文件与输出文件是否匹配。 - 更改测试文件后
turnt
会显示差异,可turnt --save
接受新输出或通过git diff
查看。 - 可在输入文件中通过特殊标记配置测试,如
// ARGS: -l
配置命令行参数,用RETURN: 1
标记预期失败的测试。 turnt -p
可用于交互式执行测试,结合--args
可尝试不同命令变体。- 其他工具如 LLVM 的 lit、Insta crate、Jane Street 的 ppx-based framework、Mercurial 的 Cram、Rachit Nigam 的 Runt 等也可用于快照测试,Bril 和 Calyx 有相关示例。
- Steffen Smolka 称 Google 称其为 golden testing,@matt_dz 指出 Wikipedia 页面名为 characterization test,@bmc_称 PostgreSQL 的“regression tests”是快照测试。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。