最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

评论

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

真诚的回报

zhoo299

生活 随想

江湖事儿 | 技术人如何做好晋升准备

哈利迪

android 职业成长

像运营公司一样去做产品

胖鱼2号

创业 产品 产品经理 企业

Pycharm社区版安装教程(永久免费,随时升级)

早睡蟒

一文带你了解 Kafka 原理

cxuan

kafka

架构师应该具备哪些思维模型?

奈学教育

架构师

JDK 8,该离开的时候,请别留恋!

X.F

Java 架构 编程语言 Java 25 周年

彻底搞懂 etcd 系列文章(三):etcd 集群运维部署

aoho

架构 云原生 etcd

如何通过众包应用本地化获得 500 万次下载?

葛仲君

android 翻译 本地化 产品开发 Play商店

ARTS - Week Three

shepherd

开源 互联网 算法

单例模式详解

章小传

Java 单例模式

ARTS|Week 2 PlantUML 的学习和分享

Puran

LeetCode arts PlantUML

Spring 源码学习 - 单例bean的实例化过程

公众号:好奇心森林

原创 | TDD工具集:JUnit、AssertJ和Mockito (十九)编写测试-依赖注入\测试接口\重复测试

编程道与术

Java 编程 TDD 单元测试 JUnit

2020年6月5日 继承

瑞克与莫迪

区块链能够防伪?你彷佛有什么误解!

CECBC

CECBC 区块链技术 商品溯源 防伪

游戏夜读 | 神话故事和世界观

game1night

怎样成为解决问题的高手

落曦

ARTS week3

丽子

彻底搞懂 etcd 系列文章(一):初识 etcd

aoho

架构 云原生 etcd

修改git里commit信息用户名

张张张小烦

[kube 022] 混沌测试框架-Litmus

zbyufei

Kubernetes 云原生 混沌工程 Litmus litmuschaos

程序员可迁移技能的培养

MavenTalker

程序员

我体验了一把自由职业,比 996 苦多了...

非著名程序员

创业 程序员 自由职业 创业心态

ARTS Week2

时之虫

ARTS 打卡计划

硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

小林coding

面试 TCP 网络安全 网络编程 计算机网络

日志过滤

HU

Go: Go 调度器的任务窃取(Work-Stealing)

陈思敏捷

源码分析 原理 队列 Go 语言

npm常用命令

阡陌r

Vue

ARTS|Week 02:体会刷算法题的快乐,同时开启Ubuntu 20.04备用系统

MiracleWong

算法 ARTS 打卡计划

某二手交易平台大数据平台从 0 到 1 演进与实践

奈学教育

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