写点什么

更好的单元测试准则

  • 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:483390
用户头像

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

关注

评论

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

架构师训练营第十二周作业

月殇

极客大学架构师训练营

第十二周作业

fmouse

架构师训练营第十二周作业

Shunyi

极客大学架构师训练营

week12作业

龙卷风

架构师一期

架构师训练营第一期第十二周总结

Leo乐

极客大学架构师训练营

架构师训练营 1 期第 12 周:数据应用(一)- 总结

piercebn

极客大学架构师训练营

运维数字化

春如夏花

企业架构 DevOps 数字化运维

架构入门感悟之八

笑春风

天下武功,唯“拆”不破之MECE原则二| 技术人应知的创新思维模型 (6)

Alan

个体成长 技术人应知的创新思维模型 28天写作

架构师训练营第 12 周课后练习

叶纪想

极客大学架构师训练营

架构师训练营第12周课后练习

脸不大

大数据

架构师训练营 -week12-总结

大刘

极客大学架构师训练营

Java Parser应用介绍

maijun

架构师训练营第一期第十二周作业

Leo乐

极客大学架构师训练营

极客时间架构师培训 1 期 - 第 12 周作业

Kaven

极客时间架构师训练营 1 期 - 第 12 周总结

Kaven

LeetCode题解:433. 最小基因变化,DFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

北海游记:日出、日落与海鲜

北风

摄影 游记 大海

第十二周总结

fmouse

组合设计模式实现绘图Pannel

我们新四军不拿群众一针一线

Week8总结

lggl

作业-第八周

ray-arch

使用 Docker 部署 canal 服务,实现 MySQL 数据库 binlog 日志解析

AlwaysBeta

Python MySQL 数据库 Docker Binlog

搞定MySQL安装难安装贵问题

MySQL从删库到跑路

MySQL 安装 Windows 10

别费心了,K8s根本甩不掉Docker

亨利笔记

Docker 云原生 k8s Harbor image

测开入门篇《环境管理、编码规范、项目结构》

清菡软件测试

测试开发

volcano使用必知: 从vcjob创建到pod运行

托内多

Volcano

架构师训练营第十二周总结

月殇

极客大学架构师训练营

如何更简单的使用Polly

八苦-瞿昙

随笔杂谈 aop

架构师训练营 1 期 -- 第十二周作业

曾彪彪

极客大学架构师训练营

架构师训练营第 1 期 week12 总结

张建亮

极客大学架构师训练营

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