免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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

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

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

关注

评论

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

市场调研分析师走向末法时代

人称T客

用Serverlss部署一个基于深度学习的古诗词生成API

刘宇

自然语言处理 学习 Serverless

Java 25周年:MovedByJava之观点

X.F

Java 架构 编程语言

python实现·十大排序算法之冒泡排序(Bubble Sort)

南风以南

Python 排序算法 冒泡排序

首厚智能:嵌入 SpreadJS 表格组件,搭建实验室信息管理系统(LIMS)

葡萄城技术团队

SpreadJS 实验室管理系统 Lims

BPM产业数字观察:中国市场趋向成熟,蛰伏的BPM即将醒来

人称T客

Linux 常用命令

Jayli

Linux

Spring Security 如何将用户数据存入数据库?

江南一点雨

Java spring Spring Cloud Spring Boot spring security

Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单!

江南一点雨

Java spring Spring Boot spring security

分布式系统选主怎么玩

奈学教育

分布式系统

SaaS生态比拼,谁会是这场PK中的主角?

人称T客

一个产品最不重要的东西

Neco.W

产品 外包 产品经理

一个前端工程师与死神的较量

陈辰

大前端 压力 医院 生活质量 工程师

忙于数字化转型,你避坑了吗?

人称T客

kube-prometheus抓取jvm监控指标

天飞

Java JVM Prometheus kubernete

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

往日之歌

彭宏豪95

程序员的修行之路-人生是一场修行

牧马人

程序员

教你快速升职加薪(毒鸡汤,慎服……)

Geek_6rptuk

团队管理 企业文化 个人成长 团队建设

《3个月9门课,谈下我的极客时间学习活动的心得》

王伟鹏

汇总一下Intellij IDEA常用的牛逼插件

公众号:V5codings

极客时间学习心得:用分类和聚焦全面夯实技术认知

Anfernee Hu

学习

用友2019财报:你们看到的是数字,我却看到了office

人称T客

金蝶2019财报在此——比头条更精彩

人称T客

为什么要云原生?

Aaron_涛

架构 云原生

程序员的修行之路-培养工作兴趣

牧马人

程序员

Java开发架构篇:DDD模型领域层决策规则树服务设计

小傅哥

领域驱动设计 DDD 小傅哥 重构

游戏夜读 | 写游戏用什么语言?

game1night

3亿办公族合力,第三代SaaS抵达战场

人称T客

5天掌握以太坊 dApp 开发

陈东泽 EuryChen

比特币 区块链 智能合约 以太坊 dapp

一文搞懂Spring依赖注入

麦洛

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