为什么模拟对象有错误的类型提示


Why does mock object have wrong type hint?

尝试对需要Zend_Config对象类型的方法进行简单的Zend_Config模拟,但模拟返回Mock_Zend_Config类型。

当然,我在

这么晚的时候错过了一些东西,我在函数调用中显然是错误的,但我没有发现我的错误。

$config = $this->getMock("Zend_Config"); 

返回Mock_Zend_Config,并且我的对象需要为 Zend_Config 类型。在备忘单中查找函数签名并将方法调用更改为:

$config = $this->getMock("Zend_Config", array(), array($confArray),"Zend_Config",true); 

此版本生成一个致命错误,并显示消息"Zend_Config已存在"。

在旁注上,可能与phpunit本身无关,但typehint不会产生致命的错误,并且在没有测试的情况下运行时会这样做。

知道我在 la mock 中缺少什么吗?

模拟对象扩展模拟对象。任何类扩展Zend_Config都将满足Zend_Config的类型提示,因为根据定义,Mock_Zend_Config扩展Zend_Config因此是一个Zend_Config。因此,当您尝试命名模拟时,例如它扩展的类,您将收到致命错误,如果不命名,则不会。