= Mockery = == バグ == 2010/12/24時点のバージョン0.6のバグとその対処 === PHP 5.3.6のバグによるSegmentation Fault === PHP 5.3.6のバグにより、以下のような単純なコードを実行するとSegmentation Faultが発生する。原因は不明。 {{{ register(); $a = \Mockery::mock('foo'); $a->shouldReceive('exec'); ?> }}} ※PHP 5.3.5では発生しない。PHPは言語仕様としてもレベルの低いものだが、実装技術も低水準であるので注意が必要。 === 参照渡しのメソッドのあるインターフェース等からモック作成しようとするとエラー === {{{ interface CouldNotMock { public function someMethod(&$reference); } $mock = \Mockery::mock('CouldNotMock'); }}} を実行すると、 {{{ Fatal error: Declaration of Mockery_4d141dd0a5cc0::someMethod() must be compatible with that of CouldNotMock::someMethod() in /usr/share/pear/Mockery/Generator.php(82) : eval()'d code on line 1 }}} というエラーが発生する。 修正箇所はMockery/Generator.phpの中の_replacePublicMethod(\RefelectionMethod $method)の以下の部分。 {{{ $paramDef = ''; if ($param->isArray()) { $paramDef .= 'array '; } elseif ($param->getClass()) { $paramDef .= $param->getClass()->getName() . ' '; } if ($param->isPassedByReference()) $paramDef .= "&"; // !!!!! この行を追加 !!!! $paramDef .= '$' . $param->getName(); if ($param->isOptional()) { $paramDef .= ' = '; if ($param->isDefaultValueAvailable()) { $paramDef .= var_export($param->getDefaultValue(), true); } } $methodParams[] = $paramDef; }}} == マニュアル == * [[Mockery/Manual|マニュアル抄訳]]