補遺として、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()。