使用Phpunit 4.5.2,我正在尝试模拟以下类:
class Foo {
public function bar() {}
}
class MyClass
{
private $foo;
public function __construct(Foo $foo) {
$this->foo = $foo;
//some other stuff that I want to suppress during the unit tests.
}
public function doSomething() {
$this->foo->bar();
}
}
我希望实现以下目标:
此代码:
$mock = $this->getMockBuilder('MyClass')
->disableOriginalConstructor()
->enableProxyingToOriginalMethods()
->getMock()
将失败并显示以下错误消息:
传递给MyClass :: __ construct()的参数1必须是Foo的一个实例,没有给出
如果我删除 enableProxyingToOriginalMethods(),则创建的模拟没有错误,所以当我启用代理时,这启用了构造函数,尽管 disableOriginalConstructor()调用
如何在保持构造函数禁用的同时启用代理?
答案 0 :(得分:7)
如果您代理原始类,则必须实例化原始类的对象。如果原始类具有构造函数,则必须执行该构造函数。因此,disableOriginalConstructor()和enableProxyingToOriginalMethods()是互斥的。
随意在https://github.com/sebastianbergmann/phpunit-mock-objects/issues打开一张票,要求PHPUnit在这两个一起使用时发出错误。