写点什么

文章: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:251889

评论

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

如何熟悉一个陌生系统

京东科技开发者

NL2SQL进阶系列(4):ConvAI、DIN-SQL等16个业界开源应用实践详解[Text2SQL]

汀丶人工智能

大模型 text2sql NL2SQL

NineData正式将SQL开发正式升级为数据库DevOps

NineData

DevOps 数据库设计 数据管理 SQL开发 NineData

支持国密加密卡的堡垒机是什么牌子?电话多少?

行云管家

数据安全 堡垒机 国密 国密加密卡

教你解决CCE集群中容器出网

华为云开发者联盟

容器 开发 华为云 华为云开发者联盟 企业号2024年4月PK榜

秒开率破90%!交易后台渲染性能优化 | 得物技术

得物技术

性能优化 前端 企业号 4 月 PK 榜 后台管理

FittenChat:程序员写代码的最好辅助利器,没有之一

知识浅谈

编程 AI

LED电子显示屏助广告媒体转型

Dylan

媒体 广告 电子 LED显示屏 led显示屏厂家

计算机专业必须掌握的脚本开发语言—shell

算法的秘密

Python编程与算法面试-编程面试的重点

测吧(北京)科技有限公司

测试

科技助力上亿用户隐私安全保护,合合信息两款产品再获CCIA PIA星级标识

合合技术团队

信息安全 隐私保护 合合信息 名片全能王 启信宝

「Saturn 4 Ultra土星」开启光固化3D智能打印新潮向

科技热闻

数字先锋| 加“数”蝶变,打造政务服务“心温度”!

天翼云开发者社区

人工智能 云计算 大数据 数字化

NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]

汀丶人工智能

大模型 text2sql NL2SQL

Python编程与算法面试-编程面试的重点

测试人

软件测试

MaxCompute 近实时增全量处理一体化新架构和使用场景介绍

阿里云大数据AI技术

大数据 阿里云

Hugging Face推出全新代码大模型:支持80+编程语言,集成VSCode

百度开发者中心

人工智能 深度学习 大模型

大报文之道:优化策略与实践

京东科技开发者

DDD落地指南-架构师眼中的餐厅

京东科技开发者

PrismNET棱镜协议丨没有信仰,谈何成功?

PrismNET

区块链 dapp Web3.0 PrismNET棱镜协议 PrismNET

从零开始学习大模型

百度开发者中心

人工智能 大模型 LLM

Python中两种网络编程方式:Socket和HTTP协议

华为云开发者联盟

Python 华为云 HTTP协议 华为云开发者联盟 企业号2024年4月PK榜

干货分享 | MatrixOne 如何基于K8S+S3构建HTAP数据库

MatrixOrigin

数据库 分布式 云原生

使用 Apifox 设置 OAuth 2.0 并快速获取访问令牌

Apifox

程序员 后端 oauth2.0 OAuth 2.0 API 安全

第47期 | GPTSecurity周报

云起无垠

天翼云入选“2023年度数据要素价值创新标杆示范案例”!

天翼云开发者社区

云计算 大数据

OpenAI前商业化负责人Zack Kass中国行系列活动圆满落幕!

科技热闻

IPQ4019 PK IPQ9574——Processor chip performance and application comparison

wifi6-yiyi

WiFi 7 WiFi 5

智能商品计划系统如何提升鞋服零售品牌的竞争力

第七在线

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