写点什么

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

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

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

关注

评论

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

Bundle-less 的思考和实践分享

字节跳动终端技术

bundle 字节跳动 前端 构建工具 拆包

7大特征交互模型,最好的深度学习推荐算法总结

博文视点Broadview

leetcode 225. Implement Stack using Queues 用队列实现栈(简单)

okokabcd

LeetCode 数据结构与算法

万物皆可集成系列:低代码释放用友深度价值(1)—系统对接集成

葡萄城技术团队

软件测试100天上岸3-测试有哪些最高原则

和牛

测试 8月月更

金融和科创深化合作,常熟农商银行与博云签署战略合作协议

BoCloud博云

云计算 容器 云原生

3000人无缝连接,WeLink助力华荣科技全场景数字化办公

神奇视野

观测云产品更新|观测云计费更新;新增场景仪表板/笔记/查看器的查看权限;优化监控器和事件等

观测云

沉浸感拉满!这样的电影杀约起来

科技云未来

2022各互联网大厂面经及总结+大厂Java岗面试真题解析(进大厂必看攻略)

程序知音

Java 程序员 Java 面试 后端技术 八股文

轻量化服务,大道至简,触手可及

鼎道智联

微服务 云服务 PWA 轻应用 原子化服务

​五大不良 coding 习惯,你占了几样?

SEAL安全

Code 代码规范 CODING

沟通不受限,审批不堆积 深大智能通过华为云WeLink+OA实现办公提速

神奇视野

身价百亿的Zendesk:创业,从一个小目标开始

ToB行业头条

OceanBase CEO杨冰:小就是大,构建企业核心竞争力

OceanBase 数据库

开源一夏 | Java 覆盖jar包内的方法

六月的雨在InfoQ

开源 钉钉 Java core 8月月更

如何用紧凑型语音表征打造高性能语音合成系统

小红书技术REDtech

深度学习 语音合成 自编码器 表征学习 语音表征

演进式架构从不缺设计方法,最大的阻力在于「人」

万事ONES

定制开发APP——怎样吸引更多用户?

开源直播系统源码

软件开发 直播系统源码 定制开发 app定制开发

华为云安全云脑,让企业云化运营更放心

IT资讯搬运工

企业搭建知识库的重要性,你了解多少?

Geek_da0866

2022 全球 AI 模型周报

Zilliz

深度学习 计算机视觉 Transformer 多模态

3D可视化在智慧园区的应用

3DCAT实时渲染

在Rust和C之间传递字符串,有 7 种方法!

非凸科技

c rust

AIRIOT答疑第9期|AIRIOT平台服务于哪些客户?

AIRIOT

低代码 物联网 低代码,项目开发

创建知识库使您的客户能够体验自助服务

Geek_da0866

专访通过 OBCP V3 首位考生:V3 让知识更加结构化、体系化

OceanBase 数据库

Java:在Word文档中添加或删除页眉页脚

Geek_249eec

Java word 页眉页脚

基于 Impala 的高性能数仓建设实践之虚拟数仓

网易数帆

大数据 impala 数仓架构

华为云主机安全助力企业种出“金葫芦”

IT资讯搬运工

高僧斗法(博弈-Nim博弈)

Five

算法竞赛 算法题 8月月更

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