2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

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

关注

评论

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

『腾讯网』幸运彩票是真是假[手机乐乎]

天马行空

幸运彩票是真是假

自定义规则删除过期文件(linux)

liuzhen007

28天写作 12月日更

Golang Gin 框架之模型绑定(八)

liuzhen007

28天写作 12月日更

现代软件架构师的10个技巧

俞凡

架构 微服务 云原生

Nacos 本地单机版部署步骤和使用 – Spring Cloud 系列教程

程序员泥瓦匠

nacos

35 K8S之kubeconfig配置文件

穿过生命散发芬芳

k8s 28天写作 12月日更

JetPack-Paging3-入门

Changing Lin

12月日更

Springboot异步任务执行及监控

xcbeyond

springboot 异步任务 28天写作 12月日更

Android C++系列:Linux线程(二)线程原语

轻口味

android 28天写作 12月日更

模块六作业

沐风

『腾讯网』1分彩计划软件下载[手机乐乎]

天马行空

1分彩计划软件下载

极客时间【架构实战营】第二期 毕业设计

Geek_91606e

架构实战营

庞氏骗局:购物就能赚钱

石云升

28天写作 电信诈骗 12月日更 庞氏骗局

对研发管理的一些思考

hackstoic

研发管理 规范

『腾讯网』腾讯分分彩 官网平台[手机乐乎]

天马行空

腾讯分分彩 官网平台

架构实战营毕业总结

紫云

架构实战营

毕业总结

guangbao

再来一篇!看jdk源码大师亲自操刀编写的集合源码!

看点代码再上班

Java 架构 软件技术

hw6-拆分电商系统为微服务

WWH

架构实战营

天长地久->曾经拥有

mtfelix

28天写作

存储引擎漫话

ElvinYang

B-tree LSM-Tree Hash Index MySQL InnoDB

毕业设计:电商秒杀系统架构设计

紫云

长短租用户体验

张老蔫

28天写作

模块五学习总结

Geek_1d37ea

架构实战营

在 JavaScript 中创建私有成员

devpoint

JavaScript typescript ES2020 ES6 12月日更

浅谈指标体系建设(一)

圣迪

创业研发团的组织建设-硬件开发流程

wood

创业 敏捷 28天写作 硬件开发

DDD领域驱动设计落地实践:六步拆解DDD

慕枫技术笔记

架构 后端 签约计划第二季

『腾讯网』飞艇技巧图片图解【重点推荐】[手机乐乎]

天马行空

飞艇技巧图片图解

『腾讯网』德国飞艇平台[手机乐乎]

天马行空

德国飞艇平台

模块五作业

Geek_1d37ea

架构实战营

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