速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

Dubbo的服务注册与调用

superman

Python中list操作之append、extend

王坤祥

Python Python基础

浅析Python3列表操作之*和*=

王坤祥

Python Python基础

iOS Abort问题系统性解决方案

移动研发平台EMAS

ios 监控 移动

Django单元测试用法及Fixtures用法

BigYoung

Python django 单元测试 Fixtures

架构训练营第十周感悟

张锐

【数据结构与算法】如何高效学习数据结构与算法

三钻

学习 数据结构与算法

下载的附件名总乱码?你该去读一下 RFC 文档了!

Java课代表

Spring Boot

致力打造下一代云原生分布式消息系统,StreamNative 完成源码资本数百万美元 Pre-A 轮融资,红杉中国种子基金跟投

Apache Pulsar

kafka Apache Pulsar StreamNative

威联通(NAS)应用篇:搭建个人图床

BigYoung

图床 NAS QNAP 威联通 自建

架构师课作业 - 第十周

Tulane

week10 作业

雪涛公子

手动实现mini-vue

晓枫

Java vue.js

架构师第十周

Tulane

架构师课程第十周总结

dongge

week10 总结

雪涛公子

架构师训练营——第 10 周作业

jiangnanage

架构师训练营第十周学习总结

Bruce Xiong

服务化问题与方案简述

superman

微服务 服务化改造

架构师训练营——第10周学习总结

jiangnanage

【架构师训练营】第 10 周作业

花生无翼

基于小程序云Serverless开发微信小程序

移动研发平台EMAS

让我们慢慢地成长

姜海天

个人成长

Dubbo微服务调用过程时序图

2流程序员

hive拉链表优化·百亿量级数据支持准实时更新

誓约·追光者

hive 实时数仓 海量数据库的设计与实践

【架构师训练营】第 10 周总结

花生无翼

OAuth 2.0

陈皮

微服务、中台和 DDD

dongge

架构训练营第十周作业

张锐

微服务与DDD

走过路过飞过

微服务架构关键点思考

dony.zhang

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