写点什么

更好的单元测试准则

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

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

关注

评论

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

基于生成式人工智能的平台 Cognizant Flowsource™ 发布,旨在为现代工程提供动力

财见

作业帮 x TiDB | 多元化海量数据业务的支撑

TiDB 社区干货传送门

为什么说TiDB在线扩容对业务几乎没有影响

TiDB 社区干货传送门

TiDB 底层架构 数据库架构选型 TiKV 底层架构

使用无代码/低代码平台进行开发的 5 大挑战

NocoBase

开源 低代码 低代码开发 无代码 无代码平台

Atlassian Intelligence功能简介,AI驱动生成、概括、优化内容,助力工作效率加倍

龙智—DevSecOps解决方案

AI Atlassian

京东广告算法架构体系建设--大规模稀疏场景高性能训练方案演变

京东科技开发者

面试官:你能简单聊聊MyBatis执行流程

华为云开发者联盟

Java 开发 华为云 华为云开发者联盟

火山引擎边缘云2023年度回顾,挑战与创新的交响乐章

火山引擎边缘云

边缘计算 火山引擎 火山引擎边缘云

软件公司定制开发的软件有哪些?

天津汇柏科技有限公司

软件开发定制

2023年哪个前端框架用的最多?

伤感汤姆布利柏

如何通过ETL实现快速同步美团订单信息

谷云科技RestCloud

美团 ETL 数据集成工具

从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践

TiDB 社区干货传送门

实践案例

Gartner 2023 API管理魔力象限发布,SmartBear被评为“远见者”

龙智—DevSecOps解决方案

Gartner SmartBear

Aetina发布首款采用NVIDIA Ada Lovelace架构的MXM图形模块

财见

揭秘C语言的心脏:深入探索指针与数组的奥秘

不在线第一只蜗牛

Java C语言 开发语言

关于如何优化TiDB中的写热点问题

TiDB 社区干货传送门

实践案例 7.x 实践

WebSocket 教程:实现二进制数据传输的详细指南

Apifox

前端 后端 websocket 实时通信 二进制数据

游戏开发巨擘的选择:2023 TGA获奖工作室共同青睐Perforce版本控制

龙智—DevSecOps解决方案

游戏开发 游戏 TGA

深入剖析Java中的反射,由浅入深,层层剥离!

不在线第一只蜗牛

Java 编程 前端 开发语言

Java 程序员的待遇为何一直居高不下?

伤感汤姆布利柏

打造工业4.0的5G+边缘云服务产业生态,艾灵完成1.5亿元A轮融资

极客天地

【鸿蒙千帆起】高德地图携手HarmonyOS NEXT,开启智能出行新篇章

HarmonyOS开发者

HarmonyOS

专科逆袭!裁员后薪资翻倍,他的成功秘诀竟然是…

测吧(北京)科技有限公司

测试

初识TiDB Data Migration迁移工具及实践

TiDB 社区干货传送门

迁移 7.x 实践

TiDB 在全球头部物流企业计费管理系统的应用实践

TiDB 社区干货传送门

实践案例

用 Footprint 的交易类型标签揭秘链上交易

Footprint Analytics

区块链 加密货币

Unity 现正式支持 visionOS 平台,赋能Apple Vision Pro应用创建

财见

TiDB 事务心跳超时机制测试

TiDB 社区干货传送门

故障排查/诊断

零售业海量场景下 ToC 系统的数据库选型和迁移实践

TiDB 社区干货传送门

实践案例

PingCAP 故事|势高,则围广:TiDB 的架构演进哲学

TiDB 社区干货传送门

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