写点什么

更好的单元测试准则

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

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

关注

评论

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

一篇读懂Volatile关键字

是月月啊2023

Java 面试题

【智问-Askture】降低企业成本,定制一个专属自己的ChatGPT!

伊克罗德信息科技

AIGC 大语言模型

【写作训练营打卡|03】

KubeSphere Marketpalce 上新!Databend Playground 助力快速启动数据分析环境

Databend

SQL CREATE INDEX 语句- 提高数据库检索效率的关键步骤

小万哥

MySQL 数据库 sql 程序员 后端开发

写作训练营打卡2--工作后最有成就感的事

Avril

软件测试/人工智能|一文告诉你Python元组相关操作

霍格沃兹测试开发学社

谷歌史上最强大模型Gemini抢鲜知!!!

江湖修行

AI Google openai #人工智能 #大模型

全面高压化与全面超快充,破解新能源汽车的时代难题

脑极体

数字能源

17 | 跳表:为什么Redis一定要用跳表来实现有序集合

鲁米

最全最详细的Java异常处理机制

是月月啊2023

Java 面试题

[译]你应该知道的多个HTML属性

南城FE

html html5 前端

技术人年度回顾:大模型驱动的变革与影响

熬夜磕代码、

大模型

【技术人的 2023】 ——我的AI学习之旅年度总结

YoLo

AI

系统分析师还是架构师?

escray

技术人写作 21 天技术人写作行动营

一款带键扫的LED驱动电路

芯动大师

如何将自己的项目打包成whl文件分享

IT蜗壳-Tango

IT外包对中小企业的独特优势

Ogcloud

外包 IT 外包公司 外包项目 IT 运维

OpenTiny Vue 3.12.0 发布:文档大优化!增加水印和二维码两个新组件🎈

Kagol

写作行动营学员打卡-Day3-工作笔记

Luke

极狐GitLab 和 ArgoCD 集成实现 GitOps

极狐GitLab

DevOps gitlab CD workflow ArgoCD

每日一题:LeetCode-105. 从前序与中序遍历序列构造二叉树

Geek_4z9ami

面试 算法 LeetCode 二叉树 Golag

Java多线程系列5:sleep()

BigBang!

Java多线程

软件测试/人工智能|HTTPS加密协议,你会多少?

霍格沃兹测试开发学社

2023 总结对AI的总结和展望

查拉图斯特拉说

AI 大模型

低代码实现探索(六十一)字段隔离解耦

零道云-混合式低代码平台

软件测试/人工智能|一文告诉你Python字符串的相关操作

霍格沃兹测试开发学社

英特尔研究院将在NeurIPS大会上展示业界领先的AI研究成果

E科讯

FFA 2023 明日开幕,Flink 智能诊断、小红书流批一体实践精彩来袭

小红书技术REDtech

大数据 flink 架构 流批一体

2024营销日历新鲜出炉!提前规划,赢在起跑线!

彭宏豪95

互联网 营销 在线白板 活动策划 效率软件

PostgreSQL 技术内幕(十二)CloudberryDB并行化查询之路

酷克数据HashData

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