作为附录,我想将expects()
调用附加到模拟对象上,然后调用构造函数。在PHPUnit 3.7.14中,调用时返回disableOriginalConstructor()
的对象实际上是一个对象。
$object = unserialize(
sprintf('O:%d:"%s":0:{}', strlen($className), $className)
不幸的是,在PHP 5.4中,有一个他们没有使用的新选项:
ReflectionClass :: newInstanceWithoutConstructor
由于此功能不可用,因此我必须手动反映该类,然后调用构造函数。
$mock = $this->getMockBuilder('class_name')
->disableOriginalConstructor()
->getMock();
$mock->expect($this->once())
->method('functionCallFromConstructor')
->with($this->equalTo('someValue'));
$reflectedClass = new ReflectionClass('class_name');
$constructor = $reflectedClass->getConstructor();
$constructor->invoke($mock);
请注意,如果functionCallFromConstruct
为protected
,则必须专门使用setMethods()
以便模拟受保护的方法。例:
$mock->setMethods(array('functionCallFromConstructor'));
setMethods()
必须在呼叫之前被expect()
呼叫。就个人而言,我在之后disableOriginalConstructor()
但之前将其链接起来getMock()
。