我最近和一位同事讨论了模拟。他说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/