写点什么

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

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

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

关注

评论

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

oracle中计算两个日期的相差天数、月数、年数等等

默默的成长

oracle 前端 11月月更

HTML学习笔记(一)

lxmoe

html 前端 学习笔记 11月月更

什么是 NFT 蓝筹项目

NFT Research

区块链 NFT

Docker PHP 入门实践 (三)

Felix

php Docker thinkphp 11月月更

uniapp引入 iconfont

源字节1号

微信小程序 软件开发 前端开发 后端开发

介绍:什么是智能合约dapp系统开发一站式服务

W13902449729

最新的国内低代码开发平台排名,你知道几个?

优秀

低代码 低代码开发平台 低代码平台

Wallys/QCN9074 WiFi 6E Card OpenWRT, IPQ6010, IPQ6018,802.11ax,industrial m.2 card/QUECTEL RM500Q-GL

wallys-wifi6

IPQ6010 ipq6018 QCN9074

阿里云机器学习平台 PAI宣布集成国产深度学习框架 OneFlow

阿里云大数据AI技术

机器学习 阿里云 oneflow

产品网站的FAQ页面该如何编辑?

Baklib

产品 FAQ

Oracle表空间设计基本原则

默默的成长

oracle 前端 11月月更

云栖大会开源重磅升级!PolarDB-X v2.2: 企业级和国产化适配

阿里云数据库开源

阿里云 polarDB 云栖大会 PolarDB-X 阿里云数据库

云科通明湖:金融业务可持续性能力建设,少不了这块“拼图”!

通明湖

负载均衡

QuTrunk与Paddle结合实践--VQA算法示例

启科量子开发者官方号

Python 人工智能 ai框架 量子计算 量子编程

并发编程中的锁、条件变量和信号量

C++后台开发

Go 并发编程 linux开发 C++开发

RocketMQ核心技术

苏格拉格拉

RocketMQ 消息队列 消息中间件 微服务框架

阿里进入“全面云原生深度用云”阶段 PaaS支出占用云总成本43%

阿里技术

云计算 云原生 云栖大会

Redis数据结构

苏格拉格拉

redis 缓存 Redis 数据结构

Redis核心技术

苏格拉格拉

redis 架构 持久化 部署 集群

1年Java经验,信心满满出去面试,被问麻了...

Java永远的神

spring 程序员 后端 JVM Java 面试

Docker PHP 入门实践(二)

Felix

php Docker 实战 11月月更

FOTSL:端到端的文本检测与识别方法的原理方法与优势

合合技术团队

人工智能 场景 端口 文本检测 文本识别

Dubbo核心技术

苏格拉格拉

分布式 微服务 dubbo RPC 集群

Oracle 开发规范(一)

默默的成长

oracle 前端 11月月更

双11就要到了,是时候给你的电脑来点硬货了!

淋雨

数据恢复 OCR 滤镜 录屏 磨皮

Docker PHP 入门实践(一)

Felix

php 实战案例 Docker 镜像 11月月更

Baklib|如何搭建在线帮助中心站点?

Baklib

如何通过Java将PDF转为Excel

Geek_249eec

Excel PDF java;

赋能信息技术应用创新,需要怎样的可持续性业务架构?

通明湖

负载均衡

智采云火了的背后,是企业降本增效的刚需

ToB行业头条

游戏链改NFT系统开发Web3技术

薇電13242772558

web3

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