QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

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

关注

评论

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

☕【JVM 技术之旅】带你重塑对类加载机制的认识

洛神灬殇

JVM Java虚拟机 类加载器 原理分析 5月日更

dubbo的前世今生

捉虫大师

dubbo

ASP.NET Core整合Zipkin链路跟踪

yi念之间

做开发,这几种锁机制你不得不了解一下

华为云开发者联盟

读写锁 自旋锁 互斥锁 优先锁

面试37次,16个offer上岸,总结了一些面试心得

北游学Java

面试 offer

Hive对分区分桶表的操作

五分钟学大数据

大数据 hive 5月日更

阿里的互联网三高架构是真的牛!腾讯百度根本模仿不来

Java架构师迁哥

李开复、张亚勤、吴恩达…国际大咖给你讲解AI知识

博文视点Broadview

如何快速构建嵌入式全栈知识体系?

博文视点Broadview

打破固有思维(十八)

Changing Lin

5月日更

IDC数据中心介绍

大数据技术指南

数据中心 5月日更

强化学习落地:竞态场景下基于锁机制的闲置端口查用

行者AI

强化学习

架构是什么?空中楼阁?不切实际?

Java架构师迁哥

麦肯锡最新报告 | 开发者速率成为企业增长助推剂

LigaAI

SaaS

Mybatis-Plus的应用场景及注入SQL原理分析

vivo互联网技术

源码分析 mybatis

网页端IM通信技术快速入门:短轮询、长轮询、SSE、WebSocket

JackJiang

websocket 消息推送 即时通讯 IM

iOS 面试策略之系统框架-设计模式

iOSer

ios 并发编程 tableView

一颗CPU与病魔赛跑

E科讯

联邦学习在视觉领域的应用,揭秘AI人工智能创新应用奖获奖案例

博文视点Broadview

深度分享|中小银行如何实现数字化转型,建设智能营销新体系?

索信达控股

大数据 数字化转型 金融 银行 营销数字化

云小课 | 华为云KYON之L2CG

华为云开发者联盟

虚拟私有云 华为云 大二层网络 KYON企业级云网络 L2CG

软硬件融合新时代——让软件够灵活,硬件够高效,鱼和熊掌可兼得

博文视点Broadview

云智慧发布《智能业务运维》2021年刊 邀您共览数字化运维全景象

云智慧AIOps社区

AIOPS 智能运维

书单 | 职场办公类私藏好书,轻松Get职场必备技能

博文视点Broadview

超详细的JQuery的 DOM操作,一篇就足够!

华为云开发者联盟

html 大前端 DOM 函数 JQuery框架

Docker挂了,数据如何找回

运维研习社

Docker 运维 数据恢复 5月日更

一种基于实时分位数计算的系统及方法

百度Geek说

云计算 大前端 云服务

毕业设计So Easy:基于Java语言西餐厅点餐系统

不脱发的程序猿

Java 开源 Java语言西餐厅点餐系统 毕业设计

Java程序员想要拿到50W以上年薪,哪个技术是必备的?

Java架构师迁哥

当当购书优惠码又可以限时抢啦(热卖新书等你来)

博文视点Broadview

树莓派上的 K8S 集群挂了,怎么办?

百度开发者中心

百度 技术 经验分享

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