unit-testing - 为什么模拟类(class)这么糟糕?

标签 unit-testing testing mocking

我最近和一位同事讨论了模拟。他说mocking classes是非常不好的,不应该做,只是在少数情况下。

他说只有接口(interface)应该被模拟,否则就是架构错误。

我想知道为什么这个说法(我完全相信他)是正确的?我不知道,想被说服。

我是否错过了 mock 的重点(是的,我读过 Martin Fowler's article )

最佳答案

Mocking 用于协议(protocol)测试 - 它测试您将如何使用 API,以及当 API 做出相应 react 时您将如何 react 。

理想情况下(至少在许多情况下),该 API 应指定为接口(interface)而不是类 - 接口(interface)定义协议(protocol),类至少定义部分实现。

实际上,模拟框架往往对模拟类有限制。

根据我的经验,mocking 有点被过度使用了——通常你对确切的交互并不真正感兴趣,你真的想要一个 stub ...但是 mocking 框架可以用来创建 stub ,并且您陷入了通过模拟而不是 stub 来创建脆弱测试的陷阱。不过,要取得正确的平衡很难。

关于unit-testing - 为什么模拟类(class)这么糟糕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1595166/

相关文章:

angularjs - 使用 Jasmine 测试 Angular Controller 对带有 Promise 返回的服务的调用的最佳方法

unit-testing - 如何用 Jest 模拟导入

javascript - meteor 测试 : Mocha doesn't find all test files

ruby-on-rails - 如何为具有许多模型调用的方法编写简短、干净的 rspec 测试?

java - 反射不适用于 Spring Autowiring 参数

testing - Gradle + Robolectric + Espresso : can't run separately

unit-testing - 测试时模拟 Gradle 插件使用的类

c# - 我能否使用 Moq 来验证是否使用复杂参数中的特定值调用了模拟方法?

javascript - 错误 : Enzyme Internal Error: unknown composite type undefined

javascript - 测试覆盖率 React, Istanbul 尔 -_registerComponent(...) : Target container is not a DOM element