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

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

关注

评论

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

区块链产业,怎样“链”住未来?

CECBC

区块链

数字人民币都来了 黄金还有什么用?

CECBC

数字货币

anyRTC Flutter SDK :全面实现跨平台音视频互动

anyRTC开发者

音视频 WebRTC RTC sdk 安卓

JVM真香系列:轻松掌握JVM运行时数据区

田维常

JVM

从一场“众盟科技云滇之播”,我们发现了美食直播的商业与公益价值

人称T客

把最新JAVA面试真题(阿里/字节跳动/美团)整理出来,却被自己菜哭了,赶紧去刷题了

Java架构追梦

Java 阿里巴巴 架构 面试

完美!阿里P8都赞不绝口的世界独一份489页SQL优化笔记

Java~~~

Java 数据库 程序员 架构师 SQL优化

《迅雷链精品课》第二课:区块链核心技术框架

迅雷链

区块链

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,使用数组,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

【T1543.003】利用 ACL 隐藏恶意 Windows 服务

比伯

Java 大数据 编程 架构 计算机

Java垃圾回收GC概览

Java JVM GC

【算法题目解析】杨氏矩阵数字查找

程序员架构进阶

算法 二分查找 杨氏矩阵

简要分析近几年商业软件开发平台的现状

Philips

敏捷开发 快速开发 企业应用

Docker

涨薪神作!华为内部操作系统与网络协议笔记爆火,Java程序员有福了

Java架构之路

Java 程序员 面试 编程语言

可以解除程序员中年危机的职业规划

Java架构师迁哥

Pulsar Summit Asia 2020 中文专场议题出炉!

Apache Pulsar

大数据 开源 Apache Pulsar

TCP性能分析与调优策略

程序员 计算机网络 网络协议

Redis基础—了解Redis是如何做数据持久化的

数据库 redis 编程 计算机

当代开发者的六大真实现状,你被哪一个场景“戳中”了?

华为云开发者联盟

开发者 调研 报告

云计算简史(完整版)

明道云

JMeter100个线程竟然只模拟出1个并发

dongfanger

软件测试 Jmeter 性能测试 压力测试 测试工具

马士兵老师首推Java七条自学路线,自学到底能不能行?自学也能拿到40W年薪?

Java架构追梦

Java 架构 面试 马士兵 项目实战

阿里云视频云实时字幕技术,助力英雄联盟S10全球总决赛

阿里云CloudImagine

游戏开发 直播 语音识别 字幕

cglib入门后篇

Rayjun

Java cglib

从零到千万用户,我是如何一步步优化MySQL数据库的?

冰河

数据库 架构 性能优化 分布式数据库 分布式存储

京东技术中台Flutter实践之路(二)

京东科技开发者

开源 中台 大前端 Web UI

非线性声学回声如何破解?华为云硬核技术为你解决

华为云开发者联盟

算法 音视频

Java程序员必备,Github上星标55.9k的微服务神级笔记简直太香了,学完感觉自己又行了!

Java架构之路

Java 程序员 架构 面试 编程语言

5G为数字化转型插上翅膀

CECBC

5G网络安全

IPFS云算力挖矿系统开发技术

薇電13242772558

区块链 IPFS

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