写点什么

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

评论

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

“3公里5分钟”卓翼智能无人机打通怒江物流配送“最后三公里”

科技热闻

YashanDB异构数据库链接配置

YashanDB

数据库 yashandb

音乐NFT软件系统的上线流程

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

智能制造:工业装备数字化端到端解决方案

积木链小链

数字化转型 智能制造 装备制造

YashanDB数据库删除

YashanDB

数据库 yashandb

YashanDB SYSAUX表空间管理

YashanDB

数据库 yashandb

<大厂实战场景> ~ Flutter & 鸿蒙 Next 处理后端返回来的数据的转义问题

淼.

FreeBSD 13.5 正式版发布 - 高性能开源 Unix 系统

sysin

freebsd

Flutter & 鸿蒙 Next 中的路由使用详解【基础使用】

淼.

Flutter & 鸿蒙 Next 中如何实现 WebView【跳、显、适、反】等一些基础问题

淼.

一组数据告诉您,企业AI为什么选用友BIP!

用友智能财务

WebGL开发医学影像软件中的优化

北京木奇移动技术有限公司

软件外包公司 数字孪生开发 webgl开发

Flutter & 鸿蒙版本数据处理常用总集

淼.

创建云主机你不知道的那些事

天翼云开发者社区

云计算 云主机

YashanDB数据库删除

YashanDB

数据库 yashandb

YashanDB SYSTEM表空间管理

YashanDB

数据库 yashandb

FreeBSD 13.5 x86_64 OVF (sysin) - VMware 虚拟机模板

sysin

freebsd

Flutter & 鸿蒙 Next 刷新机制的高级使用【衍生详解】

淼.

NineData社区版抢先体验,获取无人机、双肩包、充电宝等周边福利

NineData

安装部署 SQL审核 无停机数据库迁移 NineData社区版 数据库变更

个人微调大模型踩坑与记录

Z C C C L

人工智能 大模型 模型微调

YashanDB控制文件管理

YashanDB

数据库 yashandb

YashanDB配置参数文件与密码文件管理

YashanDB

数据库 yashandb

<大厂实战场景> ~ Flutter & 鸿蒙 Next 解析后端返回的 HTML 数据详解

淼.

荣耀远航计划丨【主题精品共创】激励解读

荣耀开发者服务平台

创作活动 荣耀HONOR 荣耀远航计划

DeepSeek接入MES系统AI赋能智能化生产

万界星空科技

制造业 mes 万界星空科技 生产管理MES系统 DeepSeek

黑龙江等保测评、消除“过等保”的隐形成本

黑龙江陆陆信息测评部

智慧医院软件信息化建设方案,智慧医疗医院建设方案(PPTX)

金陵老街

智慧医疗 医疗信息化 智慧医院

批量创建云主机的整个过程

天翼云开发者社区

云计算 云主机

<大厂实战经验> Flutter & 鸿蒙 Next 中使用 initState 和 mounted 处理异步请求的详细解析

淼.

.NET Core 中如何实现缓存的预热?

秃头小帅oi

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