8

正式に定義された期待がない場合、phpunitモックオブジェクトにメソッド呼び出しを期待しないように指示する方法はありますか?

4

2 に答える 2

15

私の意見では、すべての方法を決して期待しないという考えはありません。したがって、phpunitには機能がありません。一部のメソッドが呼び出されないことを完全に保証したい場合にのみ、「決して」期待を使用する必要があります。

とにかく、いくつかのマッチャーを使用して目標に近づけることができます。例:

すべてのオブジェクトのメソッドを期待しない (モックされたメソッドのいずれかが呼び出される場合は失敗します):

$mock->expects($this->never())
    ->method($this->anything());

したがって、たとえば、オブジェクトがテスト済みのメソッド以外のメソッドを呼び出さないことをテストできます。

$mock = $this->getMock('Some\Tested\Class', array('testedMethod'));
$mock->expects($this->never())
    ->method($this->anything());

別のマッチャーでも試すことができます。matchesRegularExpression:

$mock->expects($this->never())
    ->method($this->matchesRegularExpression('/get.*/'));

たとえば、ゲッターが呼び出されると、上記は失敗します。

これはあなたが望んでいるものではないことは承知していますが、残念ながらphpunitにはそのような解決策はありません。

于 2012-11-30T09:51:50.103 に答える
1

特定の引数が与えられたときにメソッドが呼び出されないことをテストしたい場合は、

$mock->expects($this->any())
->method('foo')
->with(new PHPUnit_Framework_Constraint_Not('bar'));
于 2013-08-01T15:17:21.123 に答える