写点什么

更好的单元测试准则

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

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

关注

评论

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

过程控制 硬件维护经验总结(7)

万里无云万里天

工业 工厂运维 过程控制

并行智能体是否将重塑软件开发模式?

Baihai IDP

程序员 AI 智能体 AI编程 并行智能体

阿里面试题思路解析-高并发场景下的JVM调优实战

测试人

软件测试

AI 时代的数据库进化论 —— 从向量到混合检索

老纪的技术唠嗑局

AI‘’ 混合检索 向量化引擎

怎么把Figma导入Photoshop?详细的文件转换指南来了!

职场工具箱

设计师 ps figma ui设计 界面设计

储能规模定多大?—— 西格电力容量配置优化模型与工具方法

西格电力

新能源行业 #高性能存储 智慧储能电站 储能 绿电直连

达能×火山引擎:用AI升级消费者洞察

字节跳动数据平台

以“AI+专识+多智能体”为核心思路,暖哇科技专识库支撑理赔自动化率提至80%

暖哇科技

别再选错!5分钟掌握AI Agent框架选型的方法

六边形架构

框架搭建 技术选型 AI Agent 大模型应用开发 LLM应用开发

中昊芯英斩获2025全球数字贸易创新大赛人工智能赛道金奖第一名​

科技经济

Data + AI 时代,对象存储为 AI 应用注入全局动力

火山引擎开发者社区

从电网守护到全运接力,5G-A机器人的破壁之旅

脑极体

AI

中昊芯英创始人杨龚轶凡作为中国AI芯片企业代表受邀出席迪拜AIM SUMMIT

科技经济

今日立冬 | 万物始藏 冬之伊始

中烟创新

安势清源SCA助力赛事!开源小满EasyXMen轻量级性能指标实时监控系统挑战赛决赛名单揭晓,巅峰对决即将开启!

安势信息

安势 清源SCA 开源小满 EasyXMen

Redis 搭建主从复用-主备切换

刘大猫

人工智能 云计算 大数据 算法 物联网

过程控制 硬件维护经验总结(6)

万里无云万里天

工业 工厂运维 过程控制

英伟达领投,语音AI初创Uniphore估值25亿美元;ElevenLabs创始人:语音的意义不在准确,而在打动丨日报

RTE开发者社区

2025年MES系统排名:万界星空MES与其他品牌对比优势

万界星空科技

mes 云mes 万界星空科技mes 制造业转型 AI低代码MES

西格电力直供微电网设计③:短路电流计算与设备选型实例

西格电力

微电网 直供微电网 微电网管理系统 设备选型 分布式电源

Ovi:双骨干跨模态融合的音频-视频生成技术详解

qife122

视频生成 多模态AI

聚势AI,赋能企业穿越周期稳增长:「AI 共创 三生万物」司马阅2025企业AI落地应用峰会北京站圆满收官

司马阅

招聘实习生丨加入我们,共建 RTE 开发者社区

RTE开发者社区

新晋社区之星何晨阳:从使用者到贡献者,我是如何理解并反哺开源?

隐语SecretFlow

开源 程序人生 采访 人生故事 贡献者

Agentic AI基础设施实践经验系列(四):MCP服务器从本地到云端的部署演进

亚马逊云科技 (Amazon Web Services)

人工智能

可视化设计中的交互:实用方法指南

inBuilder低代码平台

交互设计 可视化设计 职能层交互 决策层交互 协同交互

喜报 | 隐语社区 SCQL Maintainer 荣获中国信通院 2025 年度 OSCAR“开源+人物”奖

隐语SecretFlow

评估工程正成为下一轮 Agent 演进的重点

阿里巴巴云原生

阿里云 云原生 agent

事半功倍:.NET 开发者的 Visual Studio 效率技巧!

追逐时光者

.net Visual Studio

在职场生存中如何做个不好惹的人

老李说技术

职场 职场 PUA 职场发展 职场妙招

内存泄漏 vs. 内存溢出:剖析Java虚拟机两大内存绝症的病因与疗法

poemyang

垃圾回收 Java虚拟机

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