千家信息网

隐藏在mock之后的‘快感’

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,最近某同事抱怨他们的测试难写,经常花费在测试的时间比产品代码更多,而且每次重构后都必须修改一大堆的测试。和同事闲谈后得知,在其项目中大量的使用了mock,或者说对mock的使用过度极端对所谓的单元测试
千家信息网最后更新 2026年11月03日隐藏在mock之后的‘快感’

最近某同事抱怨他们的测试难写,经常花费在测试的时间比产品代码更多,而且每次重构后都必须修改一大堆的测试。和同事闲谈后得知,在其项目中大量的使用了mock,或者说对mock的使用过度极端对所谓的单元测试"快速","独立"的过度。 在前边转载过《软件开发中没有所谓正确的方法》,当你把某一种方法论作为银弹使用的时候,早晚魔鬼会伴随在你身边。

Mock给我带来了感知,剥离了类与类之间的依赖,有助于我们更好的工作在当前的关注点 .但同时由于太多的对场景的假设,导致这块代码成为了信息的孤岛,甚至很多时候不得不用mock的第二特性verify,order,以至于你的测试关心的不再是代码存在的business逻辑,而倾向代码层面的设计实现,这就把你单元测试推向了"白盒测试"的位置,导致测试变为脆弱的测试。每当简单的重构导致内部的变化,你的测试也必须随着改变。

鄙人认为作为一个好的测试而言,在一次合法的简单重构之下,是不需要修改测试的,因为你修改的只是内部实现,而不是business的改变,如果你边改测试边重构或者重构后挂到一大堆测试,这意味这你的测试不是一个稳定的测试或者你不是一次合法的重构(也许redesign,override)。

在同事的项目中对mock的极端到了对简单的View Object 也采用builder模式,可是内部却全是mock given。在我看来而言View Object只是一个简单的数据载体,不存在行为逻辑,我们毫无必要去做mock,mock该是针对假设,而应该尽量避免对状态mock。在同事的项目中导致需要写一个测试之前,作为测试的准备given ,必须理解存在代码的实现,因为你需要一堆given,比如对于person对象,如果你在实现中需要得到account则:

given(person.getAccount()).willReturn(some account);

导致我需要了解实现需要什么property,如果我需要新的的property也许只是简单的把某个"依恋情结"放入了object,测试也需要被修改,导致重构者对自己的重构并不那么自信,这将影响重构成为日常行为,随着堆积的"坏味道"这将一点一点的侵蚀你的代码,项目慢慢的也许会不能的不可控。

Mock并不是一个坏的东西,结果的好坏在于使用的人,团队 的意识,如果是mock anywhere或者杜绝mock走向两个任意的极端都将是一个错误的抉择。

Mock更多的使用场景为对外界资源解依赖增强感知能力,以及对无响应的重要business的验证,后者长体现于一个没有返回子void的method,但是method比如增加用户积分,记录用户信息等的。然而对于有响应的business,我需要的不是mock而应该是assert,对于测试来说对于business来说应试是我的输入应该得到我预期的响应,而非我verify某个行为发生了,那么其结果一定就正确,当然对于实现来说这是成立的,但是从测试的价值来说这厮无意义的,这将是一个脆弱的测试,我认为一个好的测试将是"黑盒测试",是一个business的描述,对一份约定,契约的阐述。

附言,如果你因为测试的速度,独立性来为自己的mock证明,那将是无意义的,不是每一个测试都必须在黄金法则内(0.1s),如果你对外部依赖,耗时依赖的分离,这我相信将不再是问题所在,测试的优化将是另一个有趣的话题,将不是本问内容之列。


测试 重构 代码 同事 项目 只是 极端 行为 合法 脆弱 信息 单元 场景 大堆 方法 时候 更多 用户 结果 逻辑 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 互联网科技公司简介 互联网科技活动banner 互联网科技与金融科技 互联网科技公司发展 唐信互联网科技 百单互联网科技有限公司 互联网金融 科技创新 互联网科技博客 互联网金融和金融科技 衡水科技产业互联网平台 河南猎农互联网科技有限公司 移动互联网年度科技创新 深圳育鹏互联网科技有限公司招聘 中国科技创新与世界互联网大会 河南住房之家互联网科技 中和天地互联网科技有限公司 广州千川互联网科技有限公司 互联网科技创业有什么好项目 恒生科技互联网指数十大成分股 互联网科技公司 什么是科技互联网 丰台科技园 互联网 天速互联网络科技有限公司 厦门比较好的科技互联网公司 科技互联网大厂 佛山市翊博互联网络科技有限公司 工业互联网展湾科技股份有限公司 沐思想互联网科技有限公司 福仕德教育科技互联网
0