展开讨论

经验与复盘经验摘录 · 机器翻译

我在 Google 的第二个项目基本上让我放弃了模拟(mocking),从那以后我基本上再也没有做过

我在 Google 的第二个项目基本上让我放弃了模拟(mocking),从那以后我基本上再也没有做过。发生了两件事。第一件事是,我参与了一个重写项目(使用了 GWT,这还是十多年前的事了),他们决定要有大量的测试覆盖率和测试要求。这没问题,但它们被强制执行的方式让每个人只是测试自己的服务,并注入了很多模拟对象。结果是完全可以预见的。整个系统非常脆弱,一个只存在了8周的服务表现得像遗留代码一样。你可能需要花半天时间来修复测试中的模拟对象,仅仅是为了做一个30分钟的更改,因为你切换了后端服务、改变了调用顺序,或者只是调用了某个服务的次数比预期多了。这非常糟糕,完全是浪费时间。…

源讨论在担任 Mockito 维护者10年后决定卸任原帖 214 条评论 · 导入时统计
6

社区评论 0

还没有社区评论,来聊聊你的看法。

原讨论中的回复 6

仅展示本次导入中包含的直接回复。中文为机器翻译,可查看英文原文。

LG

“解决方法是创建具有最小正确行为的模拟服务和接口” 如果你没有用 mock 来做这件事,那你就是用错了 mock。

完整原文
EB

在所有我不得不使用 Mockito 的情况下,它都是最后的手段,因为第三方库很难被 mock,或者你正在对遗留代码进行测试,并且使用它直到重构掉。 它不应该成为首选工具。但当你需要它的时候,它非常有用。

完整原文
TH

我不确定我是否理解。"解决方法是创建具有最小正确行为的模拟服务和接口"。 这其实就是 mock 的本质。你还有其他使用 mock 的方式吗?

完整原文
ZE

我在谷歌的工作经历也让我得出结论,在几乎所有情况下,假对象(fakes)都比模拟对象(mocks)更好(尽管我当时使用的是C++和Python,而不是Java)。 编辑:当然,谷歌是一个特殊的情况,因为你可以访问所有源代码。我认为在某些情况下,只有模拟对象才能奏效,因为无法用假对象满足类型签名。

完整原文
YE

大量使用模拟对象是由于教条式地遵循了“测试金字塔”中“大多数测试应该是单元测试”的错误建议,以及严格坚持一次只测试一个类。这导致了大量的模拟对象使用,这很脆弱,难以重构,导致很多低价值的测试。不幸的是,如今的AI在那些不了解情况的人手中会生成大量这样的单元测试。总的来说,这导致了同样的虚假安全感,并阻碍了开发速度。

完整原文
RU

我不使用虚拟服务,也不使用模拟对象。我正在为硬件或无法用于测试的大服务编写模拟器来测试这些东西。 模拟器需要针对其使用场景是完整的,否则就无法用于测试。

完整原文
在 Hacker News 阅读

尊重不同观点,分享具体经验。

登录后即可发帖、评论、转发和引用。