写点什么

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

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

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

关注

评论

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

如何进行数据挖掘?

郑州埃文科技

数据挖掘 数据库

基于WEB快速开发平台的轻量ERP

雯雯写代码

ERP 快速开发平台

基于深度学习的时间序列预测

云智慧AIOps社区

关于知识库:你需要知道的一切

小炮

Gitlab-ci 替代 webhook 触发Jenkins job

网易云信

gitlab

如何使用OKR管理团队?

优秀

租房小程序

源字节1号

前端开发 后端开发 租房小程序

Go HTTP Server 基于OpenTelemetry 使用Jaeger - 代码实操

非晓为骁

Go Docker Trace Jaeger OpenTelemetry

向工程腐化开炮 | Java代码治理

阿里巴巴终端技术

Java android JVM 代码治理

hexo+github搭建个人博客前期部署工作

静Yu

Hexo

企业内PAAS建设的经验与教训

Crazy

中间件 PaaS 经验 云原生应用

被冰封的 Bug:Fishhook Crash 修复纪实

声网

Dev for Dev fishhook

聊聊 kerberos 的 kinit 命令和 ccache 机制

明哥的IT随笔

数据安全 kerberos

租房小程序

源字节1号

前端开发 后端开发 租房小程序

数字化时代下,智能运维全栈监控解决方案及案例盘点

云智慧AIOps社区

运维 解决方案 场景应用 自动化运维 运维安全

企业知识管理的目标是什么?

小炮

云计算及国内主流云厂商概述

穿过生命散发芬芳

3月月更

如何从头到脚彻底解决一个MySQL Bug?华为云数据库高级专家带你看

华为云数据库小助手

bug GaussDB 华为云数据库 GaussDB(for MySQL)

openGauss社区成立ReleaseManagement SIG

杜绝不良信息侵害未成年,皮皮APP发起语音社交行业自律书

联营汇聚

Jaeger docker部署实操

非晓为骁

Docker Jaeger Go 语言 http client

移动域全链路可观测架构和关键技术

阿里巴巴终端技术

架构 App 移动端 体验优化

中国AI的下一站:从两会高地奔涌向产业河谷

脑极体

喜讯!openGauss社区入选2021年 “科创中国”榜单

OceanBase 社区版 运维管控平台 OCP 功能解读

OceanBase 数据库

OCP oceanbase OceanBase 开源 OceanBase 社区版

打造优质的车联网体验,仍需注意数据安全保护

FinClip

实用机器学习笔记二十五:超参数优化

打工人!

学习笔记 超参数调优 机器学习算法 3月月更

WebRTC 简单入门

ZEGO即构

WebRTC 动手实践 音视频开发 即构科技

APICloud平台使用融云模块实现音视频通话实践经验总结分享

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 融云 跨端开发

盲盒风潮过后,中国收藏玩具市场该何去何从?

易观分析

盲盒 潮玩

VuePress 博客之 SEO 优化(一) sitemap 与搜索引擎收录

冴羽

Vue vuepress SEO 博客搭建 sitemap

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