把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

更好的单元测试准则

  • 2009-07-26
  • 本文字数:732 字

    阅读完需:约 2 分钟

Jimmy Bogard 写了一篇文章:“从你的单元测试中获得价值”,在文章中他给出了三条规则:

  1. “测试名称应该从使用者的角度来描述是什么以及为什么”;核心思想是一名开发者应该能够从测试名称理解测试行为是什么样的。
  2. “测试也是代码,爱他们吧”;仅在产品代码中做重构是不够的。易于理解的测试更易于维护,而且后来的人也更容易弄清楚。 “我憎恨、憎恨长而复杂的测试。如果一个测试的 setup 方法有 30 行,请将这些代码放在一个 creation 方法中。一个长测试会激怒开发者并让其头昏眼花。如果在产品代码中没有长方法,为什么会允许在我们的测试代码中有长方法?”
  3. “不要设定单一 fixture 的模式 / 组织风格”;通常情况下是一个类对应一个 test fixture,但有时候这样的标准并不适用。

Lior Friedman 补充:“规则#0——测试外部行为而不是内部结构。” 或者,测试一个类的期望行为而不是它的目前结构。

Ravichandran Jv 补充了他自己的规则:

  1. 尽可能做到每个测试一个断言。
  2. 如果在一个测试中有任何“if else”语句,将语句分支移到单独的测试方法中。
  3. 如果被测试的方法有 if else 分支,该方法应该被重构。
  4. 测试方法名称应该表明是某种测试。例如,TestMakeReservation 与 TestMakeNoReservation() 是不同的。

NUnit 的作者 Charlie Poole 再次说明:每测试一断言的说法为一个“逻辑断言”,他说:“有时,由于被测试的 api 缺乏表达能力,你需要写多个断言语句来获得期望的结果。在 NUnit 框架 api 的开发中,很多工作就是试图让一个断言做更多的工作。”

Bryan Cook 提出了他自己的列表:

  1. 实作:Fixture 命名保持一致
  2. 实作:模拟目标代码的命名空间
  3. 实作:Setup/TearDown 方法命名保持一致
  4. 考虑:分离测试与产品代码
  5. 实作:按功能给测试命名
  6. 考虑:在期望异常的命名中使用“Cannot”作为前缀
2009-07-26 01:483771
用户头像

发布了 47 篇内容, 共 13.0 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

YashanDB的不同部署选项及选择指南

数据库砖家

YashanDB的存储引擎架构及优势

数据库砖家

联想:筑牢智算网络“坚实底座”,开启AI算力“极速时代”

科技大数据

YashanDB的多功能性及其对行业的影响

数据库砖家

YashanDB的多租户架构优势解析

数据库砖家

YashanDB的服务级别协议

数据库砖家

HarmonyOS6 应用升级经验分享

万少

HarmonyOS

Claude Code 插件系统来了

Immerse

从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践

StarRocks

Clickhouse 存算分离 StarRocks Compaction UBT 架构

吼吼科技:以工业互联网之力,点燃制造业智能化新引擎

极客天地

YashanDB的存储压缩技术及性能提升经验

数据库砖家

YashanDB的多维数据处理能力解析

数据库砖家

YashanDB的负载均衡策略及其对业务的影响

数据库砖家

YashanDB的国际化策略及其对企业的影响

数据库砖家

新版 perf 文件解读与性能分析

地平线开发者

自动驾驶; 算法工具链 地平线征程6

YashanDB的API接口与开发者支持策略

数据库砖家

YashanDB的安全性评估及应对策略解析

数据库砖家

拿下全球终端AI和AI Phone定义权,为什么是荣耀Magic8?

脑极体

AI

征程 6 | 工具链如何支持 Matmul/Conv 双 int16 输入量化?

地平线开发者

自动驾驶; 算法工具链 地平线征程6

【AI绘画】你有多久没有打开SD了?

卷福同学

AI绘画 Stable Diffusion SD

YashanDB备份策略与灾难恢复实战指南

数据库砖家

YashanDB的API接口使用指南

数据库砖家

YashanDB的多租户架构如何支持企业发展

数据库砖家

YashanDB的负载均衡技术解析及应用

数据库砖家

YashanDB的高速缓存机制:提升响应速度的关键

数据库砖家

终结机器人评测混战时代,RoboChallenge带来大规模真机测评基准

脑极体

AI

实时调度36万真人医生,百度健康AI管家有医靠更可信

科技大数据

YashanDB的备份与恢复策略确保数据安全

数据库砖家

YashanDB的多云支持特性:企业数字化转型的助力

数据库砖家

YashanDB的核心架构:了解其设计理念

数据库砖家

Claude 新发布的 Agent Skills 到底是啥?居然比 MCP 还厉害?

hepingfly【gzh:和平本记】

agent Claude

更好的单元测试准则_研发效能_Mark Levison_InfoQ精选文章