写点什么

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

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

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

关注

评论

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

自动生成API工具——Swagger3

Java学术趴

7月月更

DelayQueue源码分析-特点与新增

zarmnosaj

7月月更

C语言入门(一)

逝缘~

c 7月月更

复杂查询so easy ,GaussDB(for Cassandra)推Lucene引擎全新解决方案

华为云开发者联盟

数据库 后端

区块链技术带来司法“加速度”

CECBC

【愚公系列】2022年7月 Go教学课程 007-计算机进制和变量命名规范

愚公搬代码

7月月更

【Unity】绘制阿基米德螺旋线

萧然🐳

Unity 7月月更

Java 缩小字符串( Compact String)和 压缩字符串(Compressed String)

HoneyMoose

App Store 的 App 迁移

贾献华

7月月更

值得学习的Python GUI 库 - pyQt5快速入门及精美界面设计体验

迷彩

PyQt5 Qt Designer 7月月更

想要治好水,龙王也要拜拜这朵云

白洞计划

需求量最大的6个区块链工作

CECBC

Redis stream性能测试实践【Java版】

FunTester

2种数据库覆盖式数据导入方法介绍

华为云开发者联盟

数据库 大数据 后端

传统企业要为 Web3 和去中心化做的 11 个准备

CECBC

前端与HTML

小恺

7月月更

鸿蒙 eTS 开发方式 Image 组件详解【续】

坚果

HarmonyOS OpenHarmony 7月月更

清源(CleanSource) SCA推出容器镜像扫描功能

安势信息

容器 安全 SCA 容器镜像 容器镜像Docker

砥砺十年,“信”创未来!亚信科技AntDB数据库产品发布会即将启幕

亚信AntDB数据库

AntDB 国产数据库 亚信科技 产品发布会 数据库·

❤️❤️❤️爱了爱了!这样的文字动画让你爱不释手!

岛上码农

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

TSDB与Blockchain

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

应用性能管理与链路追踪的关系

穿过生命散发芬芳

链路追踪 7月月更

正则表达式(二)

Jason199

正则表达式 js 7月月更

Cgroup devices子系统

总想做点什么

初识Linkerd项目

阿泽🧸

Linkerd 7月月更

面向商业市场,华为式“抢滩登陆”

脑极体

4种Kafka网络中断和网络分区场景分析

华为云开发者联盟

后端 开发 网络 网络中断

Binder通信过程

北洋

Andriod 7月月更

Cgroup Cpuset子系统

总想做点什么

【刷题记录】4. 寻找两个正序数组的中位数

WangNing

7月月更

C++算法题中对于字符串的一些妙手

KEY.L

7月月更

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