Php 模拟:被动部分模拟与默认模拟有何不同?

Php 模拟:被动部分模拟与默认模拟有何不同?,php,mocking,mockery,Php,Mocking,Mockery,在这篇快速引用mockry的文章的最后几段中,作者解释了mock的一些行为修饰符,这些修饰符不是默认的,但可能有用。其中包括makePartial()调用和shouldDeferMissing()调用 这些行为与默认行为有何不同?当您创建一个mock(mockry::mock('myClass'))并且不添加任何方法期望时,就我所知,所有方法调用都会转到父级(即myClass) 这是嘲弄快速参考的最后一部分 \mockry::mock('MyClass')->makePartial() 也 \m

在这篇快速引用mockry的文章的最后几段中,作者解释了mock的一些行为修饰符,这些修饰符不是默认的,但可能有用。其中包括
makePartial()
调用和
shouldDeferMissing()
调用

这些行为与默认行为有何不同?当您创建一个mock(
mockry::mock('myClass')
)并且不添加任何方法期望时,就我所知,所有方法调用都会转到父级(即myClass)

这是嘲弄快速参考的最后一部分

\mockry::mock('MyClass')->makePartial()

\mockry::mock('MyClass')->shouldDeferMissing()

被称为被动部分模拟(不要与真正的部分模拟混淆) 模拟对象(稍后讨论),这种形式的模拟对象将延迟所有 方法不受对模拟的父类的期望的约束, i、 我的班级。而上一个shouldIgnormissing()返回 null,此行为仅调用父级的匹配方法

  • 完全模拟对象要求必须预期所有方法调用
  • 真正的部分模拟对象将只模拟指定的方法,并且不能为非模拟方法设置期望值。如果在创建mock时没有指定方法,它将把对该方法的所有调用推迟到父类
  • 被动部分mock将延迟方法调用,而不期望调用mock的父类
后两者之间的区别在于,对于被动部分模拟,在设置期望值之前,不需要指定要模拟的方法。当您设置期望时,它将为您创建模拟方法