Locked History Actions

Diff for "Mockery"

Differences between revisions 9 and 10
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:


== バグ ==

2010/12/24時点のバージョン0.6のバグとその対処

=== 参照渡しのメソッドのあるインターフェース等からモック作成しようとするとエラー ===

{{{
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;
}}}

Line 5: Line 46:
[[Mockery/Manual|マニュアル]]  * [[Mockery/Manual|マニュアル抄訳]]

Mockery

バグ

2010/12/24時点のバージョン0.6のバグとその対処

参照渡しのメソッドのあるインターフェース等からモック作成しようとするとエラー

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;

マニュアル