尝试为编译器和类似编译器的东西进行快照测试

主要观点:过去几年我们实验室的人员成为快照测试的信徒,它简单且适合将文本转换为其他文本的程序,此方法广泛但常未被命名,本文介绍其理念和尝试的原因,还展示了实验室构建的简单快照测试工具 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”是快照测试。
阅读 7
0 条评论