私は、すべてのオーバーライドされたメソッドのデフォルト値を使用してsetUpでモックインスタンスを作成しようとしていますが、いくつかの異なるテストでは、設定しなくても何をテストしているかによっていくつかのメソッドの戻り値を変更します。モック全体。これを行う方法はありますか?PHPUnit Mockを設定した後、そのメソッドを変更することはできますか?
これは私が試みたものですが、素朴なアプローチは機能しません。この方法では、依然として元の期待設定からの値が返されます。
まずセットアップ:異なるアサートする前に別の試験で
$my_mock->expects($this->any())
->method('one_of_many_methods')
->will($this->returnValue(true));
:
$my_mock->expects($this->any())
->method('one_of_many_methods')
->will($this->returnValue(false));
この質問への複製:PHPUnit Mock Change the expectations later、それ1は何の回答を得なかったし、私は新しい質問がもたらすかもしれないと思いました前の問題。
/**
* @dataProvider methodValueProvider
*/
public function testMethodReturnValues($method, $expected) {
// ...
$my_mock->expects($this->any())
->method($method)
->will($this->returnValue($expected));
// ...
}
public function methodValueProvider() {
return array(
array('one_of_many_methods', true),
array('another_one_of_many', false)
);
}
編集:これを行うには
AFAIK残念ながら、phpunitではそのような可能性はありません。例えば、$ my_mock - > __ phpunit_hasMatchers()を使用することができますが、それはあなたが望むものではありません。もちろん、a) "at" matcherまたはb) "returnCallback"では、同じメソッドで異なる戻り値を設定できますが、呼び出しの順序に依存します。b)呼び出しパラメータ..しかし、あなたが探しているものではありません。私は何か新しいことを理解することを知らせます。 – Cyprian
も参照してくださいhttp://stackoverflow.com/questions/5484602/mock-in-phpunit-multiple-configuration-of-the-same-method-with-different-argum/5484864#5484864 – bishop