写点什么

更好的单元测试准则

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

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

关注

评论

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

LangChain + Streamlit + Llama:将对话式AI引入本地机器

3D建模设计

人工智能 LLM

第二周作业

大肚皮狒狒

提升研发效能的低代码思路

高端章鱼哥

自动化 研发效能 低代码 JNPF

2023.10.14-价值最大化沙盘演练

ShineScrum捷行

使用three.js与WebGL相比有什么优势?

3D建模设计

WebGL three.js

Adobe联创去世,没他就没有PDF,乔布斯也因他逆风翻盘

Openlab_cosmoplat

PDF

使用 ChatGPT 的代码解释器进行数据科学的 5 种方法

3D建模设计

Python 数据分析 ChatGPT

学习 ChatGPT 一切基础知识的绝佳资源

3D建模设计

人工智能 ChatGPT LLM

百度智能云推出828大促活动,文心AI作画低至9.9元

科技热闻

如何高效实现混合App开发?

FinFish

混合开发 小程序化 混合app 超级App开发

这款Linux不收费,却赢得了江湖!

高端章鱼哥

Linux 开源 npm

业内首份!电信和互联网数据安全标准汇编发布(附下载)

极盾科技

数据安全

悦数图数据库与 keyarchOS 完成浪潮信息澎湃技术认证

悦数图数据库

数据库 图数据库 分布式图数据库

面部表情识别技术的最新研究进展

来自四九城儿

一云多芯能力再获认可!天翼云助推政企上云行稳致远!

天翼云开发者社区

云计算

图数据库有哪些:知名图数据库产品和应用场景介绍

悦数图数据库

数据库 图数据库

Dreamweaver 2021中文版下载 网页编辑软件dw2021纯净版

mac

苹果mac Windows软件 Dreamweaver 2021 网页编辑软件 DW021

面部表情识别的伦理问题与应对策略

来自四九城儿

近期大型攻防演练观感及未来攻防趋势判断

墨菲安全

安全 软件供应链

面部表情识别技术在人机交互中的应用

来自四九城儿

如何使用LLM实现文本自动生成视频

3D建模设计

Python 人工智能

企业级即时通讯协作和移动应用管理平台哪个品牌好?

WorkPlus

如何使用Redis实现分布式锁?

王磊

Java Java面试题

OpenTiny Vue 3.10.0 版本发布:组件 Demo 支持 Composition 写法,新增4个新组件

OpenTiny社区

前端 开源项目 UI组件库

如何设计自动化测试落地方案

老张

自动化测试 测试方案

UltraEdit mac(文本编辑器) v22.0.0.18中文版下载

mac

UltraEdit 文本编辑器 苹果mac Windows软件

解码全栈

互联网工科生

开发者 全栈工程师 全栈开发

从FTP到SFTP,哪个才是跨国传输大文件的最佳方案

镭速

大文件传输 传输大文件 跨国大文件传输

企业级私有化部署即时通讯,完美替代SaaS平台

WorkPlus

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