写点什么

更好的单元测试准则

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

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

关注

评论

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

如何利用极狐GitLab 轻松管理NPM依赖发布与更新?

极狐GitLab

node.js DevOps npm 依赖 极狐GitLab

适配 Laravel 多版本的开源项目版本号规划

ModStart

叮咚~,这份春节前突击检查应对指南请收好!

嘉为蓝鲸

自动化运维 weops 嘉为蓝鲸

MASA Stack 1.0 发布会圆满收官

MASA技术团队

.net 云原生 PaaS dapr MASA

IoTDB 可实现的基本操作 —— 数据写入、删除、导出、元数据管理、时区设置 | 小白教程文档(四)

Apache IoTDB

时序数据库 国产数据库

OpenHarmony如何切换横竖屏?

OpenHarmony开发者

OpenHarmony

Appuploader内测版本详解

雪奈椰子

iOS上架 ios打包

WorkPlus移动办公平台,助力企业随时随地“指尖办公”

WorkPlus

干货 | 企业监控系统体系化建设思路

嘉为蓝鲸

自动化运维 嘉为蓝鲸 企业监控系统

网易伏羲预训练模型”玉言“登顶CLUE分类榜单,成绩首次超过人类水平

网易伏羲

人工智能

阿里云云边一体容器架构创新论文被云计算顶会 ACM SoCC 录用

阿里巴巴云原生

阿里云 容器 云原生

Kyligence 成功签约阿斯利康,助力提升商业洞察质量和决策效率

Kyligence

数据分析 指标中台

被面试官问住了,MySQL两阶段提交是什么鬼?

程序员拾山

MySQL 面试

【提升团队运营效率】交易履约之订单中心实践

京东科技开发者

平台搭建 平台赋能 数智创新 效能提升 企业号 1 月 PK 榜

IoTDB 可实现的基本操作 : 数据导入、基本查询、聚合查询 | 小白教程文档(三)

Apache IoTDB

国产时序数据库

嘉为蓝鲸研运一体化解决方案荣获信通院XOps领域年度明星解决方案

嘉为蓝鲸

自动化运维 嘉为蓝鲸

MySQL性能优化浅析及线上案例

京东科技开发者

MySQL 性能优化 索引性能 数据库· 企业号 1 月 PK 榜

利用 IoTDB 替换 Druid.io 服务太极股份电厂、军工制造类项目,采集精度达纳秒级

Apache IoTDB

时序数据库 国产数据库

maven pom 中有用的两个配置

JefferLiu

21世纪啤酒与尿布的故事

Marvin Ma

广告 流媒体 啤酒与尿布

小场景解决大问题|明道云在京东方的落地实践

明道云

北邮一号卫星搭载 IoTDB 成功发射!高效轻量数据管理,助力航天观测分析

Apache IoTDB

数据库 时序数据库 国产数据库

服务网格领域的百花齐放,是否存在一个更优解?

API7.ai 技术团队

Service Mesh 服务网格 APISIX

WeOps上新啦 | WeOpsV3.14拓展云平台能力,支持自动发现和监控告警

嘉为蓝鲸

自动化运维 weops 嘉为蓝鲸

一个 go-sql-driver 的离奇 bug

SOFAStack

特定领域知识图谱(DKG)融合方案:技术知识前置【一】-文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评KG生产质量保障

汀丶人工智能

自然语言处理 知识图谱 实体对齐

KubeVela 再升级:交付管理一体化的云原生应用平台

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

CuPL 利用大规模的语言模型,更高效地生成提示

Zilliz

安卓影像飞升时刻:vivo X90 Pro+打通HDR任督二脉

脑极体

Vivo 蔡司影像

企业内部沟通,即时通讯软件要怎么选?

WorkPlus

位运算在数据库中的实际应用

领创集团Advance Intelligence Group

数据库 位计算

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