10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

更好的单元测试准则

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

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

关注

评论

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

【得物技术】初探 OpenResty

得物技术

nginx 性能 openresty tengine

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

Java~~~

Java MySQL 数据库 架构 面试

了,来了!Nacos 2.0的Spring Boot Starter终于来了

Summer

Java 学习 程序员 架构 springboot

与外部系统的读写交互(八)

Databri_AI

flink kafka Cassandra

趁着课余时间学点Python(十二)面向对象的理解(结局)

ベ布小禅

8月日更

干货分享!通过Dapr快速落地DDD,实现高并发

行云创新

【前端 · 面试 】JavaScript 之你不一定会的基础题(二)

编程三昧

JavaScript 面试 大前端 事件 8月日更

SQL的执行计划-->explain

卢卡多多

sql 8月日更

音频技术及行业的发展

声网

音频技术

网络安全行业真的内卷了吗?

网络安全学海

网络安全 信息安全 网络 渗透测试 安全漏洞

百度程序员:面试官看过我的博客,所以没敢问我多线程

今晚早点睡

Java 百度 程序员 面试 计算机

前端之算法(三)归并排序

Augus

数据结构与算法 8月日更

GitHub上火了这份堪称神级的SpringBoot手册,竟出自滴滴之手

Java~~~

Java 架构 面试 微服务 Spring Boot

腾讯三面:哨兵挂了,Redis还能正常工作吗?

Summer

Java redis 学习 程序员 架构

红黑树的理解与 Java 实现

编程菌

Java 编程 程序员 计算机 技术宅

终于有人把操作系统、网络系统、线程进程、IO模型全部总结出来了

Java~~~

Java 架构 面试 TCP 网络

腾讯三面落马+拒网易、CVTE后,字节四面成功拿下offer

编程菌

Java 编程 程序员 面试 计算机

QDS06 Iperf 测网速

耳东@Erdong

8月日更 qds iperf

架构实战营毕业总结

9527

#架构实战营

360搜索宣布下线“明星人气排行榜”:饭圈文化不是洪水猛兽

石头IT视角

爆赞!GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java~~~

Java 架构 面试 IDEA 架构师

阿里首本凤凰架构竟要付费,构建大型分布式系统的指南这么宝贵吗

Java~~~

Java 架构 面试 分布式 高并发

低耦合、高内聚?

escray

学习 极客时间 如何落地业务建模 8月日更

Web框架Gin | Gin 路由

xcbeyond

Go 语言 路由 gin 8月日更

网络攻防学习笔记 Day104

穿过生命散发芬芳

态势感知 网络攻防 8月日更

面对物联网安全隐患高墙,熵核科技如何实现突围

熵核科技

物联网安全

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

Summer

Java 学习 程序员 架构 jdk

ReentrantLock 中的 4 个坑!

王磊

Java 并发 lock 8月日更

支持高性能计算场景,博云容器云打造智能算力引擎

BoCloud博云

容器 高性能计算

出自清华大神之手的JVM实战手册,刚上架GitHub点赞就达到85k

Java~~~

Java 架构 面试 JVM 多线程

在科技圈流行的冥想,为什么没有全民推广?

脑极体

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