写点什么

更好的单元测试准则

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

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

关注

评论

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

“昇腾万里•齐聚津门”昇腾AI创新大赛2023 天津区域赛暨第十期“津英汇”活动成功举办

彭飞

数字矿山:智慧煤矿可视化2D组态系统

2D3D前端可视化开发

组态软件 智慧矿山 2D组态 智慧煤矿 智慧矿井

加入华为云AIGC实战营,一起探索AI前沿技术!

科技热闻

几分钟搞定Java程序CPU飙升场景

HelloGeek

Java Docker 容器 解决方案

【活动回顾】Rust:构建新时代基础设施的首选语言 @Qcon

Databend

从“作坊模式”到“平台科研”,和鲸聚焦 AI4S 项目全生命周期管理

ModelWhale

AI for Science 可复现性 科研协同 全生命周期 科研

金融和大模型的“两层皮”问题

脑极体

金融 大模型

英特尔FPGA系列再扩容,打造完美产品矩阵

E科讯

深势科技基于 Serverless 容器为科研人员打造高效的开发平台

阿里巴巴云原生

阿里云 Serverless Kubernetes 容器 云原生

Arrays.asList():使用指南

越长大越悲伤

Java

Mac电脑剪切板复制粘贴推荐: PopClip for Mac激活中文版

胖墩儿不胖y

Mac软件 剪切板工具 文本编辑工具

征服数据宇宙,新华三存储护卫队早有准备?

脑极体

存储

新老用户看过来~最实用的 Milvus 迁移手册来啦!

Zilliz

数据迁移 Milvus Zilliz 向量数据库

语音识别技术:未来人机交互的重要接口

数据堂

zone.js由入门到放弃之五——NgZone & ApplicationRef源码分析

OpenTiny社区

前端 angular

ByConity 0.2.0 版本发布

字节跳动开源

数据库 大数据 开源 开源社区 数仓

亚马逊 CodeWhisperer 初体验

亚马逊云科技 (Amazon Web Services)

JavaScript typescript 人工智能

15年磨砺,亚信科技AntDB 8.0数据库,倾“擎”发布

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

打破界限!百度「共拓计划」将AIGC营销推向新高度

科技热闻

Apache IoTDB v1.2.0/v1.2.1 发布|增加流处理框架、动态模板等新功能

Apache IoTDB

语音识别技术的挑战与机遇

数据堂

低代码平台:解决开发中的重复“造轮子”

树上有只程序猿

低代码 造轮子

低代码开发平台的优点和缺点

互联网工科生

低代码 可视化开发 JNPF

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz 向量数据库

语音识别技术:原理、应用与未来

数据堂

GitHub超60K的“亿级高并发系统设计手册”被疯传

小小怪下士

Java 程序员 系统设计 高并发

降低代码圈复杂度优化技巧

南城FE

JavaScript 前端 代码 代码规范

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