補遺として、expects()
モックしたオブジェクトに呼び出しをアタッチしてから、コンストラクターを呼び出したいと思いました。PHPUnit 3.7.14 では、呼び出したときに返されるdisableOriginalConstructor()
オブジェクトは文字通りオブジェクトです。
// Use a trick to create a new object of a class
// without invoking its constructor.
$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
isの場合、保護されたメソッドがモックされるようprotected
に具体的に使用する必要があることに注意してください。setMethods()
例:
$mock->setMethods(array('functionCallFromConstructor'));
setMethods()
コールの前にコールする必要がありexpect()
ます。個人的には、これを after disableOriginalConstructor()
but beforeにチェーンしgetMock()
ます。