2017-10-24 2 views
0

を皮肉っていない:嘲笑は、私はLaravel 5.5を使用して、このクラスの内部で使用されるクラスのパブリックメソッドを模擬しようとする方法

class ToTest { 
    public function filters() { 
    return 'original'; 
    } 

    public function callMe() { 
    return $this->filters(); 
    } 
} 

これは私のTestcodeです:

public function it_should_call_bla_bla() 
{ 
    $mock = $this->mock(ToTest::class); 
    $mock->shouldReceive('filters')->andReturn('not orignial'); 

    $toTest = app(ToTest::class); 
    print_r($toTest->callMe()); 
} 

private function mock($class) 
{ 
    $mock = Mockery::mock(app($class))->makePartial(); 

    $this->app->instance($class, $mock); 

    return $mock; 
} 

$toTest->callMe()戻りoriginal ...

答えて

1

問題はこれだろうあなたの代わりにクラスのオブジェクトのうち、あなたのモックを作成し、正しいコード、あなたの要件を満たすために、次のとおりです。

 $mock = Mockery::mock($class)->makePartial(); 

何が起こったのかは、オブジェクトを嘲笑していたことです。 ToTestオブジェクトがすでに初期化されている場合は、filtersメソッドをオーバーライドしてcallMeのままにします。古いコードでprint_r($toTest->filters());をダンプしようとすると、"not original"が返されます。

+0

ありがとうございました! – nutzt

関連する問題