写点什么

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

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

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

关注

评论

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

自定义aop实现Cacheable注解(零拷贝), CacheItemGet,CacheMapGet,CacheMapPut

张音乐

Java 缓存 注解 9月日更

架构训练营 模块7 - 王者荣耀商城异地多活架构设计

sophiahuxh

计算机工业的生态链(三)

姬翔

9月日更

java拼团小程序源码(毕设)

清风

毕业设计

【网络安全】Spring框架漏洞总结(一)

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

Python——内置函数----让你偷懒的工具

在即

9月日更

坍缩的企业

涛哥 数字产品和业务架构

企业架构

分分合合分分,谷歌医疗走向大败退

脑极体

网络攻防学习笔记 Day132

穿过生命散发芬芳

网络模型 9月日更

linux之chattr命令

入门小站

Linux

编程基础:CPU资源监控

正向成长

CPU调度

全球国家简码信息表

入门小站

工具

快速上手Apache POI

卢卡多多

POI Apache POI 9月日更

spine动画文件转dragonbones骨骼文件

风翱

9月日更 dragonbones

HTML进阶(二)

Augus

html 9月日更

MySQL五个常见的高可用方案

hanaper

大厂敲门砖!P9技术官级别的顶级并发编程宝典,献给想去大厂的你

Java 编程 面试 程序人生 p9

从零到MySQL架构师学习内容整理

hanaper

简单五步:给你的 Golang 应用加一个 GUI ( Electron 驱动)

baiyutang

UI 跨平台 Go 语言 GUI 9月日更

测试模型中理解压力测试和负载测试

FunTester

性能测试 接口测试 压力测试 FunTester 负载测试

ebay支付账务系统架构解析之“读”一无二

贾奇 (Jacky)

支付系统 CQRS 读写分离

设计模式类型

一个大红包

9月日更

MySQL + Keepalived 双主热备搭建

Se7en

KVM虚拟机常用管理命令

玏佾

kvm 虚拟主机

区块链技术解决信任问题

CECBC

如何从数据到资产

奔向架构师

数据治理 9月日更

网卡修改网速和buffer

耳东@Erdong

9月日更 网卡

如何PWA构建现代离线应用程序

devpoint

Service Worker 9月日更

一文说清BIO、NIO、AIO不同IO模型演进之路

慕枫技术笔记

后端 引航计划

GraphQL 快速入门【1】简介

码语者

Rest graphql

Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—4)

不脱发的程序猿

Python qt GUI设计 PyQt5

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