2017-03-01 5 views
1

メソッドとそのパラメータを置き換えるべきではありませんか?モックビルダーがメソッドのシグネチャを置き換えていません

私はこれがどのように動作するか理解していない、

私はに実行し、問題..私は例-ペーストコピーが、私は箱から出して動作するはずです一つ一つの例でトラブルに遭遇することは方法がないということですパラメータが削除されていないので、メソッドがパラメータとして特定の依存関係を持っている場合、私はそれを模擬メソッドに渡す必要があります。

マニュアルでは、デフォルトではすべてのメソッドが返される空のメソッドヌル。

私は5.7(PHP 5.6)

class SomeClass 
{ 
    public function doSomething(\Exception $e) 
    { 
     // Do something. 
    } 
} 

class StubTest extends TestCase 
{ 
    public function manualExampleDoesntWork() 
    { 
     // Create a stub for the SomeClass class. 
     $stub = $this->createMock(SomeClass::class); 

     // Configure the stub. 
     $stub->method('doSomething') 
      ->willReturn('foo'); 

     // Calling $stub->doSomething() will now return 
     // 'foo'. 
     $this->assertEquals('foo', $stub->doSomething()); 
    } 

    public function ... 
    { 
     // Should be enough, doesnt work 
     $stub = $this->createMock(SomeClass::class); 
     $stub->doSomething(); // error 

     // Neither 
     $stub = $this->createMock(SomeClass::class); 
     $stub->method('doSomething') 
      ->withAnyParameters() 
      ->willReturn('foo'); 
     $stub->doSomething(); // error 

     // Same for manually building with the mockbuilder.. 
    } 
} 

結果を使用してい

:これはほんの一例であるArgument 1 passed to Mock_***95::doSomething() must be an instance of Exception, none given

、私はモックを作成するためのあらゆる可能なバリエーションを試してみた、私の中ですべての結果ではありませんパラメータを置き換えることができます。

答えて

1

メソッドオーバーロード/オーバーライドです。 PHPは、C++やJava doと同じようにこのことをサポートしていません。つまり、現在のクラスのスコープ内または継承チェーン内で、同じ名前と異なる引数リストを持つメソッドを宣言することはできません。メソッドのシグネチャは同じである必要があります。 1つの例外は__constructで、異なる署名で上書きできます。また、PHPにはオーバーロードの概念があると言わざるを得ないが、それはちょっと違うアイディアだ。あなたはさらにherehereを読むことができます。

あなたの特定の例に関しては、上記のすべての言ったあなたはSomeClassのスタブののdoSomething方法はまだ本物SomeClassと同じシグネチャを持っているのでExceptionクラスのかExceptionのスタブ付きインスタンスのいずれかでdoSomethingを呼び出さなければならないことを意味します。また、別のオプションとしてpublic function doSomething(\Exception $e = NULL)と宣言することもできます。

SomeClassモックのdoSomethingメソッドの実装は、デフォルトでは本当に空です(設定するまで)。

+0

私は今、愚かな気持ちになります。 –

+0

あなたは確かにはいけません。私たちが思っているか期待していることとは違ったことがいつも起こります)) – xmike

関連する問題