-1

関数をオーバーロードするモデルがありwhereます。

私のオーバーロードされたメソッドは次のようになります。

public function where($column, $operator = null, $value = null, $boolean = 'and')
{
    if (in_array($column, $this->metaFields))
    {
        $value    = '%"' . $column . '":"' . $value . '"';
        $column   = 'meta';
        $operator = 'like';
    }

    return parent::where($column, $operator, $value, $boolean);
}

今、phpunit と嘲笑を使用して、このクラスをテストしようとしています。オーバーロードされた where 関数をテストする必要があります。本当に気にするのは、渡される値が何であるかだけです。parent::where()

私の質問は、それは可能ですか/どうすれば親クラスをモックできるのでしょうか

$metaField = 'colour';
$value     = 'blue';
//on the parent
->shouldReceive('where')->with(['meta', 'like', '%"colour":"blue"%'])->once();

//on the model I am testing
$model->where('colour', 'blue');
4

1 に答える 1

1

私が本当に気にしているのは、parent::where() に渡される値が何であるかだけです

いいえ、あなたはしません。これは、単体テストではまったく気にする必要のない実装の詳細です。ただリラックスしてください。

編集:それは冗談ではありませんでしたが、設計でこれが必要な場合は、実際にその「親」をモックして注入できるように、継承よりも構成を優先する必要があります。したがって、そのような期待をテストします。定義上、モックのモックの親はクラスであるため、この場合の親は、親ではなく、オーバーロードされたメソッドを持つクラスです。あざけりで「親」をあざけることはできません(私が知っている他のPHPモックライブラリではありません)。

于 2013-06-22T02:05:11.070 に答える