写点什么

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

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

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

关注

评论

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

嵌入式Linux下完成LCD屏文字显示(帧缓冲框架)

DS小龙哥

4月月更

【课程汇总】Hello HarmonyOS系列课程,手把手带你零基础入门

HarmonyOS开发者

HarmonyOS ArKUI 3.0

长沙好人

成周

【建议收藏】吐血整理Golang面试干货21问-吊打面试官-1

利志分享

golang golang 面试

在互联网+的背景下,企业如何创新客户服务?

小炮

客户服务

Kafka设计的基本原理

平凡人生

外包学生管理系统详细架构设计文档

高山觅流水

「架构实战营」

活动预告 | 4月23日,多场OpenMLDB精彩分享来袭,不负周末好时光!

第四范式开发者社区

机器学习 数据库 AI 特征 特征平台

Docker Compose 部署Kibana和 Elasticsearch本地集群 8.1.3

Geek漫游指南

elasticsearch

架构实战训练 模块三

小马

「架构实战营」

一起学习Python的Sanic框架:路由和蓝图

宇宙之一粟

Python 4月月更 sanic

架构实战营-模块三-作业

michael

架构实战营 #架构实战营 「架构实战营」

spring-cloud-kubernetes自动同步k8s的configmap更新

程序员欣宸

Java Kubernetes 4月月更

Java类应用高内存问题排查指南

中原银行

Java JVM 问题排查 中原银行 高内存

java培训redis的集群策略

@零度

redis JAVA开发

APISIX jwt-auth 插件存在错误响应中泄露信息的风险公告(CVE-2022-29266)

API7.ai 技术团队

api 网关 APISIX CVE

云原生虚拟化:基于 Kubevirt 构建边缘计算实例

火山引擎边缘云

容器 k8s 边缘计算 Kubevirt

云原生架构下的微服务选型和演进

阿里巴巴云原生

Robot OS驱动开发

轻口味

c++ android Robot 4月月更 AOSP

被滥用的“架构师”!

博文视点Broadview

vue中使用element-resize-detector

CRMEB

基于 TiDB 的 Apache APISIX 高可用配置中心的最佳实践

API7.ai 技术团队

微服务网关 api 网关 APISIX TiDB

深入理解JMM-CPU多核硬件架构剖析及Java内存模型

janyxe

JVM cpu Java内存模型

如何构建一个可“持续演进”的可观测体系?| QCon

阿里巴巴云原生

超越 iTerm!号称下一代 Terminal 终端神器,用完爱不释手!

沉默王二

web前端培训React 泛型组件

@零度

前端开发 React

模块三:外包学生管理系统-架构设计文档

jiaoxn

「架构实战营」

Ampere Computing释放观测云“芯”算力,强强联合推动可观测性发展

观测云

可观测性 可观测

观测云入驻阿里云计算巢,为用户构建稳定安全的云上连接

阿里云弹性计算

Java 并发编程总结

Joseph295

从mybatis-plus-generator看如何编写代码生成器

Rubble

4月日更 4月月更

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