嘲弄:被动部分模拟与默认模拟有何不同?
Posted
技术标签:
【中文标题】嘲弄:被动部分模拟与默认模拟有何不同?【英文标题】:Mockery: how does a passive partial mock differ from the default mock? 【发布时间】:2014-10-19 18:33:41 【问题描述】:在这个(伟大的)Mockery 快速参考的最后几段中,作者解释了一些模拟的行为修饰符,它们不是默认的,但可能有用。其中包括makePartial()
调用和shouldDeferMissing()
调用。
这些与默认行为有何不同?当您创建一个模拟 (Mockery::mock('myClass')
) 并且不添加任何方法期望时,所有方法调用都会转到父级(即 MyClass),据我所知......
这是 Mockery 快速参考的最后一部分。
\Mockery::mock('MyClass')->makePartial()
还有
\Mockery::mock('MyClass')->shouldDeferMissing()
被称为被动部分模拟(不要与真正的部分混淆 稍后讨论的模拟对象),这种形式的模拟对象将推迟所有 不受模拟父类期望的方法, 即 MyClass。而之前的 shouldIgnoreMissing() 返回 null,此行为只是调用父级的匹配方法。
【问题讨论】:
【参考方案1】: 完整的模拟对象要求所有方法调用都必须是预期的 真正的部分模拟对象只会模拟指定的方法,您不能为非模拟方法设置期望值。如果您在创建 mock 时没有指定方法,它会将对该方法的所有调用推迟到父类。 被动部分模拟将在不期望模拟的父类的情况下推迟方法调用。后两者的区别在于,对于被动部分模拟,您无需在设置期望值之前指定要模拟的方法。当您设置期望时,它会为您创建模拟方法。
【讨论】:
以上是关于嘲弄:被动部分模拟与默认模拟有何不同?的主要内容,如果未能解决你的问题,请参考以下文章