2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

微服务架构设计实践

鲁米

微服务架构

企评家企业大数据,实现6种应用的场景

企评家

组织能力建设为啥这么难

凌晞

组织活力 组织建设

面由 AI 生|虚拟偶像“捏脸”技术解析

ZEGO即构

计算机视觉 虚拟偶像 Avatar AI捏脸

元宇宙(Metaverse)对普通人意味着什么?

涛哥 数字产品和业务架构

元宇宙

元宇宙或许翻译错了

涛哥 数字产品和业务架构

元宇宙

大咖说 X 对话开源|论数据库人才发展战略

大咖说

数据库 阿里云 科技

中关村e谷为产业搭台:中关村论坛(空天专场)黑科技亮相现场

联营汇聚

KubeVela 1.3 发布:开箱即用的可视化应用交付平台,引入插件生态、权限认证、版本化等企业级新特性

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

提前起跑的OPPO,靠闪充完成一次“三级跳”

脑极体

企评家,企业评价助力新三板企业健康发展

企评家

微信小程序开发系列 (二) :微信小程序的单步调试和控制器实现步骤概述

汪子熙

微信小程序 前端开发 MVVM 微信开发 4月月更

开发、运维、业务都说好的全栈云原生长这样!

York

云原生 系统架构 全栈

我们需要一个元宇宙吗?

涛哥 数字产品和业务架构

元宇宙

架构实战营 - 第 6 期 模块四课后作业

乐邦

「架构实战营」

业务架构师的思维转变

涛哥 数字产品和业务架构

企业知识管理平台的作用及功能

小炮

企业知识管理

LAXCUS分布式操作系统如何保障系统安全

LAXCUS分布式操作系统

软件系统安全 量子攻击 分布式软件系统

ArrayList和SubList的坑面试题

芝士味的椒盐

Java 面试题 Java 开发

时序数据库 vs OLAP

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

元宇宙是人类的终极未来吗?

涛哥 数字产品和业务架构

元宇宙

浅谈MatrixOne如何用Go语言设计与实现高性能哈希表

MatrixOrigin

golang 哈希表 MatrixOrigin MatrixOne 矩阵起源

阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程

阿里巴巴云原生

阿里云 云原生 FinOps

Plato Farm的“P2E”经济模型,赚取更多的MARK是关键

BlockChain先知

Dio 封装之金屋藏娇

岛上码农

flutter ios开发 安卓开发 4月月更 跨平台开发

Mysql应用开发规范

阿丞

MySQL

企业架构的7个关键趋势

涛哥 数字产品和业务架构

企业架构

易捷行云EasyStack 加入龙蜥社区,共同打造多样化算力创新云平台

OpenAnolis小助手

云计算 开源 龙蜥社区 CLA 易捷行云

企评家|河南豫能控股股份有限公司的企业成长性报告简述

企评家

轻量级 Kubernetes 多租户方案的探索与实践

火山引擎开发者社区

Kubernetes 云原生

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