写点什么

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

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

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

关注

评论

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

Go 方法接收器:选择值接收器还是指针接收器?

陈明勇

Go golang 方法 三周年连更 方法接收器

极速上手使用Docker,这篇文章就够了!

浅羽技术

Java Docker centos 容器化 三周年连更

我们如何将 Amazon Snowcone 送入轨道

亚马逊云科技 (Amazon Web Services)

Qz学算法-数据结构篇(二分查找、删除)

浅辄

三周年连更

SBOM喊话医疗器械网络安全:别慌,我罩你!Part Ⅱ

安势信息

网络安全 SBOM 开源组件 医疗器械 医疗网安

软件测试/测试开发丨Python装饰器常见报错信息、原因和解决方案

测试人

Python 软件测试 自动化测试 装饰器 测试开发

大模型“涌现”的思维链,究竟是一种什么能力?

脑极体

人工智能

深入探讨Go语言中Semaphore信号量的机制原理

Jack

CDH安装与部署

乌龟哥哥

三周年连更

轻松处理pdf文件:Acrobat Pro DC 2023 中文激活版

真大的脸盆

Mac Mac 软件 PDF编辑 pdf编辑工具

城市的智能进化,汇成数字中国的璀璨银河

脑极体

智慧城市

《底层逻辑2:理解商业世界的本质》

石云升

读书笔记 三周年连更

2023阿里云合作伙伴大会-主论坛回顾

科技pai

阿里云 伙伴大会 2023阿里云合作伙伴大会

挑战 30 天学完 Python:Day14 高阶函数

MegaQi

挑战30天学完Python 三周年连更

语义分割标注:从认知到实践

来自四九城儿

《流畅的Python》第二版上市了,值得入手么?

Python猫

Python

LoRA: 大语言模型个性化的最佳实践

Zilliz

Towhee 大语言模型

算法题每日一练:螺旋矩阵 I

知心宝贝

数据结构 算法 前端 后端 三周年连更

切片的其他妙用

宇宙之一粟

Go 切片 三周年连更

【民生证券】敏捷转型大步迈进!民生证券敏捷实践培训圆满结束!

嘉为蓝鲸

敏捷转型 民生证券

2023-04-28:将一个给定字符串 s 根据给定的行数 numRows 以从上往下、从左到右进行 Z 字形排列 比如输入字符串为 “PAYPALISHIRING“ 行数为 3 时,排列如下 P

福大大架构师每日一题

Go 算法 rust 福大大

Java注解编译期处理AbstractProcessor详解

石臻臻的杂货铺

Java

Windows下 IDE工具常见编译错误FAQ

鸿蒙之旅

OpenHarmony 三周年连更

通过华为云ECS云服务器搭建安防视频监控平台

DS小龙哥

三周年连更

挑战 30 天学完 Python:Day15 错误类型

MegaQi

挑战30天学完Python 三周年连更

手撕代码系列(三)

Immerse

JavaScript 前端面试题 手撕代码 ES6-ES12 面试必考

人脸识别:现代科技与隐私保护的博弈

来自四九城儿

苹果商店上架流程_App上架苹果流程及注意事项

雪奈椰子

什么是对象存储?对象存储的原理是什么?有哪些开源的、非开源的对象存储服务?

Java架构历程

对象存储 三周年连更

Bash 脚本中,特殊变量$0到底是什么?

wljslmz

bash Linux 三周年连更

音视频八股文(8)-- h264 AnnexB

福大大架构师每日一题

音视频 ffmpeg 流媒体

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