私はModel2を多く含むModel1を持っています。擬似Eloquentモデルの公開属性を設定する
Model1のインスタンスは、テストしたい機能にパラメタとして渡されます。私がテストしたい機能は次のようになります:
function funnctionTotest(Model1 $moel1)
{
foreach($moel1->model2s as $model2) {
....
}
}
以下の例は動作しません。私は実際のソリューションの出発点としてここに入れています(array()はModel2インスタンスのコレクションかもしれません)。 PHPUnitの中で、デフォルトでは、すべての嘲笑オブジェクトのメソッドは、彼らが何もしないとNULL
を返す意味、スタブアウトされているので
$mock = $this->getMockBuilder('Model1')
->disableOriginalConstructor()
->getMock();
$mock->setAttribute('Model2s', array());
おかげ
それはあなたがここで何をしようとして伝えるのは難しいです。 'setAttribute(string、array)'は何を行い、何をしようとしていますか?どのメソッドをスタブするのかを知らせずにModel1をモックすると、 'setAttribute'を含むすべてのメソッドがスタブされるので、' setAttribute'は何もしません。あなたが本当に 'setAttribute'を使う必要があるならば、Model1をまったく嘲笑せず、それを普通のようにインスタンス化するだけでよいでしょう。 – Ataraxia
@Ataraxia、私の編集後に今すぐクリアされることを願っています –
しかし、それを正常にインスタンス化するのではなく、Model1を嘲笑している理由はありますか?繰り返しますが、あなたがあなたの例で行ったようにメソッドを設定せずにモックした場合、あなたの呼び出しsetAttributeは何もしません。あなたはそれが "うまくいかない"と言ったときの意味についてもう少し具体的にすることはできますか?何が起こっているのか、そしてそれをやり遂げることを望んでいるのですか?回答を提出する前に問題を完全に理解していることを確認したいだけです:) – Ataraxia