写点什么

好的测试应该具备哪些特质?

  • 2008-10-04
  • 本文字数:785 字

    阅读完需:约 3 分钟

什么样的测试算是好测试?我们又该怎么知道如何编写好测试?

Kent Beck 断定,好的测试应该具备下列条件:

  1. 互相隔离的(不受其他测试的表现形式、是否存在、执行结果的影响)
  2. 自动化的
  3. 编写快
  4. 运行快
  5. 独一无二(为开发人员提供自信,而不会由其他测试提供信息,与其他测试不相关)

Roy Osherove 补充道:好的测试有三个基本属性:可维护、值得信赖、易于理解。

Mike Hill 的列表要更长:

  • 它会很短,通常只有十来行代码。
  • 它不会测试运行程序内部的对象,但是会测试为了测试目的而构建的应用内部的对象。
  • 它只会调用很小的一部分代码,通常是某个函数的某一分支。
  • 它是灰盒的形式编写的。也就是说,它运作的方式像是黑盒,但是有时又会利用白盒的长处。(一般来说,这是避免组合问题的重要因素。)
  • 测试要符合生产代码的编码标准,比如,团队目前对于优秀编码的最佳看法。
  • 应用的众多小测试构成了一个“提交关卡”。这就是说,开发人员可以在所有小测试通过的情况下提交代码,否则(强烈建议、甚至不惜手段)阻止他们提交。
  • 测试应对接受测试的对象有完全的控制权,因此应是自包含的。也就是说,它不会依赖不属于测试代码及其依赖图的任何其他对象。
  • 它的运行时间非常短。
  • 它会先于要测试的代码变更之前编写。
  • 通过一系列 slip-and-fake 技巧,它会避免使用所有“糟糕”的 collaborator。
  • ……

Mike 和 Ron Jeffries 提醒我们:TDD 的核心价值是要简化设计、提升开发效率;代码质量的提升和 bug 数量的减少是因此而带来的重要好处。

Jeremy Miller 补充了良好单元测试应该具备:

  • 与顺序无关,并且是隔离的。运行测试的软件可以按照以任何顺序运行。
  • 意图明确。最好的单元测试应该能够告诉阅读者,一个对象的 API 是如何准备被调用的。
  • 易于设置。

最后, Ed Burnette 写到:要让你的单元测试在任何方面都可以重复;测试边界条件,并且要一直保持测试的通过率是 100%。

查看英文原文: What are the Qualities of a Good Test?

2008-10-04 06:301544
用户头像

发布了 479 篇内容, 共 172.3 次阅读, 收获喜欢 52 次。

关注

评论

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

用户权限-Linux系统特殊权限

Albert Edison

Linux centos 运维 用户权限 8月月更

[CSS入门到进阶] 用transform后z-index失效了?总结transform的注意事项!

HullQin

CSS JavaScript html 前端 8月月更

架构实战营模块 9 作业

Naoki

架构实战营

为什么说:被观察者是 push 数据,迭代者是 pull 数据?

掘金安东尼

前端 函数式编程 8月月更

架构师的十八般武艺:高可用

agnostic

容灾

Java基础之网络编程(一)

自然

网络 8月月更

解密 Flutter 的 const 关键字

岛上码农

flutter ios 前端 安卓开发 8月月更

来聊聊 OpenJDK 和 JVM 虚拟机

HoneyMoose

秒杀系统设计demo

Geek_e8bfe4

【Go事】一眼看穿 Go 的集合和切片

梦想橡皮擦

Python 爬虫 8月月更

Kubernetes 真的在蚕食云吗

CTO技术共享

Kubernetes中API安全加固

CTO技术共享

IT运维如何助力企业数字化转型

阿泽🧸

数字化转型 8月月更

【Java】:二维数组的定义、初始化、长度以及循环遍历等...

翼同学

Java 学习 编程语言 分享 8月月更

IDEA开发Spark应用实战(Scala)

程序员欣宸

8月月更

Prototype以及jQuery和CDN -内容分发网络在使用JavaScript实战运用

恒山其若陋兮

8月月更

网信办将全面规范打赏连麦等功能,必须监督好平台和MCN机构

石头IT视角

IPv6过渡技术部署策略与建议

穿过生命散发芬芳

ipv6 8月月更

Struts2应用详解

No Silver Bullet

应用 Struts2 8月月更

Java基础之网络编程(二)

自然

网络 8月月更

数据结构——树(树的基本概念)

工程师日月

8月月更

Bigdata 大数据训练营毕业总结

Pyel

用RocketMQ这么久,才知道消息可以这样玩

牧小农

RocketMQ

如何安全地移动WSL 2 到另一个驱动器

吴脑的键客

windows WSL2

《博弈论》— 人生何处不博弈

蔡农曰

读书笔记 博弈论

架构设计小结

Geek_e8bfe4

SpringBoot(二、基础知识)

SpringBoot 2 8月月更

架构实战营毕业总结

Naoki

架构实战营

kubernetes镜像构建和扫描

CTO技术共享

好的测试应该具备哪些特质?_研发效能_Mark Levison_InfoQ精选文章