发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

JavaScript闭包

大熊G

JavaScript 前端 6月月更

架构训练模块 7

小马

#架构训练营

功能标记是什么?一文了解它的作用,以及它的最佳实践

龙智—DevSecOps解决方案

perforce Helix Core 功能标记

OpenMAX (OMX)框架

程思扬

音视频 编解码

InfoQ 极客传媒 15 周年庆征文|position:fixed 虚拟按键触发后无法生效问题分析及解决方案探究

No Silver Bullet

前端 6月月更 InfoQ极客传媒15周年庆 position:fixed

Node.js实用的内置API(一)

devpoint

node.js 全栈开发 InfoQ极客传媒15周年庆

八大误区,逐个击破(2):性能差?应用程序少?你对云的这些担心很多余!

龙智—DevSecOps解决方案

Atlassian atlassian云版 Atlassian白皮书

SDN系统方法 | 6. 网络操作系统

俞凡

架构 网络 sdn SDN系统方法

『Three.js』辅助坐标轴

德育处主任

canvas three.js 6月月更

疫情居家办公体验 | 社区征文

天黑黑

初夏征文

加强区块链技术司法应用

CECBC

spring4.1.8扩展实战之一:自定义环境变量验证

程序员欣宸

Java spring Spring Framework 6月月更

模块八-设计消息队列存储消息数据的 MySQL 表格

凯博无线

InfoQ 极客传媒 15 周年庆征文|必杀技--使用FFmpeg命令快速精准剪切视频

迷彩

前端 ffmpeg 视频剪辑处理 6月月更 InfoQ极客传媒15周年庆

Vue-7-计算属性和方法的区别

Python研究所

6月月更

前端食堂技术周刊第 40 期:HTTP/3、WebContainers 登陆 Firefox、Remix Conf 2022、VueConf US 2022

童欧巴

Vue 前端

设计消息队列存储消息数据的 MySQL 表格

小虾米

「架构实战营」

C#入门系列(十二) -- 字符串

陈言必行

C# 6月月更

InfoQ 极客传媒 15 周年庆征文|dubbo+zookeeper与提供者provider、消费者consumer通信原理讲解

No Silver Bullet

zookeeper 架构 dubbo 6月月更 InfoQ极客传媒15周年庆

Linux开发_文件目录操作介绍、创建BMP图片

DS小龙哥

6月月更

何时使用 Django?与其他开发堆栈的比较

海拥(haiyong.site)

6月月更

元宇宙是短炒,还是未来趋势?

CECBC

银行布局元宇宙:数字藏品、数字员工成主赛道!

CECBC

【您编码,我修复】WhiteSource正式更名为Mend

龙智—DevSecOps解决方案

代码安全 WhiteSource Mend

提升管道效率:你需要知道如何识别CI/CD管道中的主要障碍

龙智—DevSecOps解决方案

ci CD CloudBees CI/CD管道

leetcode 47. Permutations II 全排列 II(中等)

okokabcd

LeetCode 搜索 数据结构与算法

1.5 什么是架构师(连载)

凌晞

架构 架构师

SAP HANA 错误消息 SYS_XSA authentication failed SQLSTATE - 28000

Jerry Wang

数据库 SAP hana 6月月更 数据库权限

模块8作业

KennyQ

模块八

ASCE

BaseDexClassLoader那些事

北洋

6月月更

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