2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

【入门教程】Rollup模块打包器整合

小鑫同学

前端 Node 10月月更

面试官:你说说var、let、const三者的区别

CoderBin

JavaScript 面试 前端 10月月更

【实战】自定义 Github Action 库

小鑫同学

前端 Node 10月月更

【PPT下载】杭州ACE三周年活动

跟YY哥学Jira

Atlassian Jira ITSM jsm ITSM解决方案

这是我见过的,最好的工作流设计

跟YY哥学Jira

设计 Jira workflow

Babel 插件开发&访问节点

小鑫同学

前端 Node 10月月更

开发 Babel 插件可以试试这个 CLI 工具

小鑫同学

前端 Node 10月月更

跟着卷卷龙一起学Camera--夜景拍照04

卷卷龙

ISP camera 10月月更

我用了7个月拿下3个ACP认证

跟YY哥学Jira

Atlassian Jira Cloud JiraServiceManagement Atlassian认证

支撑阿里“双十一”的消息中间件,带你云淡风轻面对高并发

图灵教育

RocketMQ 中间件 架构师 消息中间件

利用fs-extra实现"yarn create tlist"创建项目

小鑫同学

前端 Node 10月月更

跟着卷卷龙一起学Camera--夜景拍照02

卷卷龙

ISP camera 10月月更

【抓包】青花瓷使用教程①

小鑫同学

前端 Node 10月月更

走进“yarn create vite”的源码学习

小鑫同学

前端 Node 10月月更

【Serverless】前端上 Ali 云必备指南

小鑫同学

前端 Node 10月月更

Java 如何将 List 转换为 MAP

HoneyMoose

【抓包】青花瓷实战教程②

小鑫同学

前端 Node 10月月更

算法 _【实验5.2】1-深度优先搜索暴力求解旅行商问题

清风莫追

算法 深度优先搜索 10月月更

OptaPlanner 和 商人旅行问题(TSP)

积木编程

OptaPlanner和网球俱乐部排程问题

积木编程

read、select、poll、epoll区别

wzh

网络 Linux Kenel epoll IO多路复用 poll

🧩 Vue 深入组件开发☞#异步组件#

小鑫同学

前端 Node 10月月更

Spring之注解开发

楠羽

笔记 Spring 框架漏洞 10月月更

【uniCloud】云对象的应用与提升

小鑫同学

前端 Node 10月月更

架构实战营模块九作业(毕业设计)

zhihai.tu

开源项目站点必备&交流区功能

小鑫同学

前端 Node 10月月更

CLI新功能之多项目启动器

小鑫同学

前端 Node 10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf整体分析

桑榆

源码刨析 10月月更 C++

【入门】你连Babel都不会配?那插件不成乱装了

小鑫同学

前端 Node 10月月更

io的实质

wzh

Linux 面试 后端 io java 编程

跟着卷卷龙一起学Camera--夜景拍照03

卷卷龙

ISP camera 10月月更

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