写点什么

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

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

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

关注

评论

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

navicat 绿化版

源字节1号

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

前端二面手写面试题总结

helloworld1024fd

JavaScript

手写JavaScript常见5种设计模式

helloworld1024fd

JavaScript

GaiaX开源解读 | 基于优酷业务特色的跨平台技术

阿里巴巴文娱技术

开源 移动开发 移动端开发

「聚变」前端 & 客户端 | 第十七届 D2 终端技术大会,来了

阿里巴巴终端技术

阿里巴巴 前端 移动端 客户端 D2

java培训和自学相比效果如何

小谷哥

ShareSDK iOS端 UniversalLink生成最佳实践

MobTech袤博科技

ios universal link

C++中的多态

可口也可樂

c++ 多态 10月月更

线下面授前端培训哪个机构好

小谷哥

数据结构-二叉树中的操作

可口也可樂

数据结构 二叉树 10月月更

react源码中的hooks

flyzz177

React

使用实时3D渲染软件创建身临其境的数字体验

Finovy Cloud

3D渲染 云渲染 图像软件

react源码中的fiber架构

flyzz177

React

大数据技术培训零基础学习怎么样

小谷哥

TiKV 源码阅读三部曲(二)读流程

PingCAP

TiKV 源码解读

告别宽表,用DQL成就新一代BI

石臻臻的杂货铺

大数据 BI 10月月更

C++中的继承

可口也可樂

c++ 继承 10月月更

IM跨平台技术学习(六):网易云信基于Electron的IM消息全文检索技术实践

JackJiang

浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

OpenHarmony开发者

OpenHarmony

在北京web前端培训后好找工作

小谷哥

在vue的v-for中,key为什么不能用index?

bb_xiaxia1998

Vue

手写现代前端框架diff算法-前端面试进阶

helloworld1024fd

JavaScript

嵌入式 Linux 入门(六、Shell 脚本编程下:Shell 脚本语法)

矜辰所致

Linux Shell shell脚本编程 10月月更

IPv4 用完,如今花钱才能重新使用获取?

郑州埃文科技

IP

java中HashMap的设计精妙在哪?

华为云开发者联盟

Java 开发 华为云 企业号十月 PK 榜

使用参数非参数和机器学习方法分析印度降雨变化,能给我国带来什么警示?

GPU算力

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

前端高频vue面试题合集

bb_xiaxia1998

Vue

Python多任务实现方式(一)-----多进程

木偶

Python 进程 10月月更

大数据技术培训零基础学习怎么样

小谷哥

一图看懂融云「百幄」数智办公平台

融云 RongCloud

办公 数智化

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