在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

你多久没有换手机了?

看山

闲聊 6月日更

架构训练营模块6作业

Neil43

架构训练营

架构实战营模块6课后作业

大肚皮狒狒

Nginx简单属性和使用总结

赵镇

推荐算法工程师需要的知识储备(十三)

Databri_AI

算法 推荐系统 成长路线

电商微服务架构设计

俞嘉彬

架构实战营

Redis 五种数据结构以及三种高级数据结构解析

蘑菇睡不着

Java redis

拆分电商系统为微服务——架构师训练营作业六

开拓纪

架构是训练营 作业六

模块六-创业公司电商微服务

华仔架构训练营

优秀中层管理者所具备的特征

石云升

读书笔记 6月日更

同被指责「电力浪费」,如今的区块链会是 1999 年的互联网吗?

CECBC

我国区块链产业发展面临的问题

CECBC

[译] R8 优化:值假设

Antway

6月日更

因女性而繁荣,适老化科技的钱景与挑战

脑极体

聊聊 Redis 过期键删除策略

蘑菇睡不着

Java redis

大型分布式 Web 系统的架构演进

xcbeyond

分布式 架构演进 6月日更

☕【JVM技术探索】各种类型对象占用内存情况分析(上)

码界西柚

JVM java对象分析 6月日更 内存分配

Redis入门二:数据类型

打工人!

redis 6月日更

【21-13】PowerShell 运算符

耳东@Erdong

PowerShell 6月日更

Flink State 和 Fault Tolerance(三)

Alex🐒

flink 翻译 flink1.13

模块六 作业

夏日

架构实战营

Kubernetes手记(17)- 调度策略

雪雷

6月日更

(鸡汤文)这一次我终于搞懂了 JavaScript 定时器的 this 指向!

编程三昧

JavaScript 编程 大前端 定时器

Flink Side Outputs

Alex🐒

flink flink1.13

聊聊 Redis 内存淘汰策略

蘑菇睡不着

Java redis

架构训练营模块六作业

Geek_e0c25c

架构训练营

电商平台微服务拆分(简化版)

白发青年

架构实战营

网络攻防学习笔记 Day50

穿过生命散发芬芳

网络攻防 6月日更

HBase 介绍

Alex🐒

HBase

超详细Redis数据结构底层实现原理介绍

蘑菇睡不着

Java redis

自然语言处理的发展

Qien Z.

自然语言处理 6月日更

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