如何用Phpunit代理到原始方法并同时禁用构造函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Phpunit代理到原始方法并同时禁用构造函数?相关的知识,希望对你有一定的参考价值。
使用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()的Argument 1必须是Foo的实例,而没有给出任何实例。
如果我去掉 启用ProxyingToOriginalMethods()因此,当我启用代理时,似乎尽管有了 disableOriginalConstructor() 调用。
如何在禁用构造函数的同时启用代理?
答案
如果你代理了原始类,那么必须实例化原始类的一个对象,如果原始类有一个构造函数,那么这个构造函数必须被执行。如果原始类有一个构造函数,那么这个构造函数必须被执行。因此disableOriginalConstructor()和enableProxyingToOriginalMethods()是相互排斥的。
欢迎在以下地址开票 https:/github.comsebastianbergmannphpunit-mock-objectsissues。 当这两者一起使用时,要求 PHPUnit 发出一个错误。
以上是关于如何用Phpunit代理到原始方法并同时禁用构造函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何用 phpunit 模拟 Laravel Eloquent 模型?