エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Mockery】テスト対象のメソッド内で、別クラスがnewされてる時のモック【402日目】

こんなとき使う

テスト対象の関数で、以下のように新しいインスタンスが作成されてる。

class Hoge
{
    public function fuga()
    {
        return new SomeClass()->someMethod();
    }
}

作成されたSomeClassのsomeMethodを、どうにかしてモックしたい。

overload

テストコード

Mockery::mock('overload:SomeClass')->shouldReceive('someMethod')
    ->once()
    ->andReturn('hoge');

これで、SomeClassインスタンスが新しく生成された時に、モックインスタンスにすり替わる。入れ替わる。

なので、Hoge::fuga()の結果が'hoge'に変わってます。

お疲れ様でした。

参考

テストダブル作成:Mockery1.0

appでインスタンスを呼び出されている場合

www.nyamucoro.com