写点什么

文章:Mock 不是测试的银弹

  • 2009-05-15
  • 本文字数:807 字

    阅读完需:约 3 分钟

开发者编写高质量测试的征途上可谓布满荆棘,数据库、中间件、不同的文件系统等复杂外部系统的存在,令开发者在编写、运行测 试时觉得苦恼异常。外部系统以及网络连接的不稳定性(外部系统停止响应或者网络连接超时),将有可能导致测试运行过程随机失败。另外,外部系统缓慢的响应 速度(HTTP 访 问、启动服务、创建删除文件等),还可能会造成测试运行时间过长、成本过高。种种问题使开发者不断寻找一种更廉价的方式来进行测试, mock 便是开发人员解决上述问题时祭出的法宝。

然而,在作者的实际项目中,虽然通过 JMock 确实大大降低了编写测试的难度,但是产品质量并没有如所预期的那样,随着不断添加的测试而变得愈加健 壮;虽然产品代码的单元测试覆盖率超过了 80%,然而在发布前进行全面测试时,常常发现严重的功能缺陷而不得不一轮轮的修复缺陷、回归测试。

在对项目案例进行分析之后,作者指出:

真实 perforce 对象的行为与测试所使用的 mock 对象行为不一致是出现上述问题的根本原因,被模拟对象的行为与真实对象的行为必须完全一致称之为mock 对象的行为依赖风险。开发者对 API 的了解不够、被模拟对象的行为发生变化(重构、添加新功能等修改等都可能引起被被模拟对象的行为变化)都可能导致错误假设(与真实对象行为不一致),错误假设会悄无声息的引入缺陷并留下非法测试。

继而提出了编写健壮测试的几条原则:

  • 要设计合理的等待策略来保守的使用外部系统
  • 要正确的创建和销毁资源
  • 要设计合理的过滤策略来忽略某些测试
  • 要充分利用计算资源而不是人力资源来加快测试

阅读文章全文 Mock 不是测试的银弹

相关阅读

[ ThoughtWorks 实践集锦(1)] 我和敏捷团队的五个约定

[ ThoughtWorks 实践集锦(2)] 如何在敏捷开发中做好数据迁移

[ ThoughtWorks 实践集锦(3)] RichClient/RIA 原则与实践(上)(下)

[ ThoughtWorks 实践集锦(4)] 为什么我们要放弃Subversion

[ ThoughtWorks 实践集锦(5)] “持续集成”也需要重构

2009-05-15 00:251989

评论

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

大数据培训:Hadoop生态系统圈

@零度

大数据 hadoop

这样才是代码管理和 Commit 的正确姿势! | 研发效能提升36计

阿里云云效

阿里云 云原生 代码管理 研发 Commit

第九节:SpringBoot在线文档Swagger2入门

入门小站

springboot

mark:Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

webrtc developer

架构实战营毕业总结

红莲疾风

「架构实战营」

在Rainbond中实现数据库结构自动化升级

北京好雨科技有限公司

新版DevOps Handbook (Part 1) 五个新增实践

Franklin 许峰

DevOps DevOps认证 Handbook DevOps实践指南 EXIN

如何低成本测试云原生(K8s)应用?

Draven Gorden

微服务 云原生 联调测试 并行测试

基于babel的埋点工具简单实现及思考

CRMEB

2 月亚马逊云科技培训与认证课程,精彩不容错过!

亚马逊云科技 (Amazon Web Services)

架构师 培训 认证

java培训:SpringBoot技术的理解

@零度

JAVA开发 spring-boot

在线字节转换工具

入门小站

工具

人人都是 Serverless 架构师之“盲盒抽奖”创意营销活动实践

Serverless Devs

Serverless 架构 2月月更

有哪些创建线程的方法?推荐使用哪种?

王磊

java面试

向工程腐化开炮 | proguard治理

阿里巴巴终端技术

Java App 客户端开发 proguard 腐化治理

小程序开发中使用网络请求

Speedoooo

再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!

沉默王二

Java

【堡垒机】堡垒机的起源以及发展历史简单了解

行云管家

运维 网络安全 堡垒机 运维安全

可持续·向未来:碳中和背景下绿色冬奥发展新趋势

易观分析

碳中和 冬奥会 产业经济

【安全漏洞】浅谈Bypass Waf (基础-实战)

H

网络安全 渗透测试 漏洞

微信朋友圈的高性能复杂度分析

阿卷

架构实战营

Flink SQL 在快手的扩展和实践

Apache Flink

大数据 flink 实时计算 编程开发

代码评审|阿里巴巴DevOps实践指南

阿里云云效

阿里云 DevOps 云原生 代码管理 代码评审

netty系列之:Bootstrap,ServerBootstrap和netty中的实现

程序那些事

Java Netty 程序那些事 2月月更

Camtasia音画同步剪辑教程

淋雨

Camtasia 录屏软件

云运维必备知识-云运维定义以及工作内容讲解

行云管家

云计算 IT运维 云运维

iofsstat:帮你轻松定位 IO 突高,前因后果一目了然 | 龙蜥技术

OpenAnolis小助手

开源 技术分享 工具集 进程管理

Flutter 重构 QTalk

Qunar技术沙龙

前端培训:Vue 面试题分享

@零度

Vue 前端开发

读书笔记:查理芒格的思维模型

panda

PingCode Wiki ——国内最顶级的产研团队知识库产品介绍

爱吃小舅的鱼

团队管理 知识库

文章:Mock不是测试的银弹_Java_胡凯_InfoQ精选文章