1

特定の順序でいくつかのモック呼び出しをテストするテストを作成するとき、準備されたすべての関数呼び出しが呼び出されたことも確認したいと思います。私はInvokedAtIndexマッチャーを使用していますが、たとえば、テストケースのこのコードはパスします:

$mock = $this->getMock('Service', 'SomeClass');
$mock->expects($this->at(0))->method('getSomeValue');
$mock->expects($this->at(1))->method('getSomeOtherValue');

$mock->getSomeValue();

準備されたすべてのモックメソッドが呼び出されたわけではないため、このテストを失敗させる方法はありますか?

ありがとうございました

4

1 に答える 1

1

問題は、あなたの例ではMethodNameマッチャーが例外をスローせず、代わりに false を返すことです。これは、シーケンサーが適切な方法でのみ適切に動作することを意味します (たとえば、サンプル モックからスタブを作成する場合) が、予期が失敗することはありません。

getSomeValue最初にメソッドが呼び出されたかどうかを確認したい場合は、2番目のメソッドでgetSomeOtherValue別のメソッドを呼び出す必要がありますInvocationMocker-たとえばwith.

したがって、それはうまくいくはずです(両方のメソッドに引数がないことを前提としています):

(...)
$mock->expects($this->at(0))->method('getSomeValue')->with();
$mock->expects($this->at(1))->method('getSomeOtherValue')->with();

$mock->getSomeValue();

2 回目の呼び出しで呼び出しを行わない限り、上記のテストは失敗しgetSomeOtherValueます。

于 2012-10-23T15:52:14.927 に答える