写点什么

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

评论

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

苦熬三个月整理的spring全家桶PDF版限时分享,整整400页

Java工程师

Java spring Spring全家桶

北京零基础前端软件培训

小谷哥

倪光南:openEuler已达国际同类社区水准

openEuler

开源 操作系统 openEuler

混合云存储点燃万亿自动驾驶市场,加速产品落地

焱融科技

自动驾驶 AI 分布式文件存储 全闪

如何编写有效的FAQ常见问题页面

Baklib

【七夕限定盲盒抽奖】一文带你搞懂盲盒抽奖的页面配置

hum建应用专家

阿里云 Serverless 函数计算

深入Linux内核IO技术栈

C++后台开发

Linux内核 内核开发 驱动开发 嵌入式开发 内核操作系统

观测云入驻青云云市场,提升云上系统统一可观测能力

观测云

Centos系统安装MySQL数据库

杨杰灵

MySQL 数据库

学习大数据开发技术后好找工作吗?

小谷哥

理解JavaScript中的“面向对象”

珲少

语音聊天app开发——开发人员如何进行代码分析

开源直播系统源码

软件开发 直播源码 语音app开发

在SaaS时代,帮助中心成为了许多企业的选择

Baklib

编译器工程师眼中的好代码:Loop Interchange

华为云开发者联盟

c c++ 开发 编译器

AIRIOT答疑第7期|如何快速提升物联网项目交付速度?

AIRIOT

物联网

最具有中国特色的微服务组件!阿里新一代SpringCloud学习指南

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

优化客户服务的 7 个关键步骤

Geek_da0866

企业为什么要数字化转型?数字化转型成功的案例有哪些?

优秀

数字化转型

【计算讲谈社】第七讲|AI 的价值探索:如何拓展商业边界?

大咖说

人工智能 AI 商业边界

MASA Stack 第三期社区例会

MASA技术团队

Framework blazor

Jmix - 业务系统高效开发的少代码平台

世开 Coding

Java spring 快速开发平台 Jmix 少代码

MySQL 概念

武师叔

8月月更

Github又火了!阿里重发系统设计核心原理全彩笔记,上线两天破百万阅读

Java工程师

Java 高并发

【云原生】Spring Cloud是什么?Spring Cloud版本介绍

java李杨勇

Java spring cloud stream 签约计划第三季

做个男人,做个成熟的男人

源字节1号

Eclipse Debug FFmpeg

贾献华

8月月更

编译器工程师眼中的好代码(1):Loop Interchange

openEuler

开源 编译器 openEuler

认识一下MRS里的“中间人”Alluxio

华为云开发者联盟

大数据 MRS

Python图像处理丨如何调用OpenCV绘制直方图

华为云开发者联盟

Python 人工智能

培训机构与自学的优缺点都有什么

小谷哥

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