web-dev-qa-db-ja.com

PHPUnit:メソッドの意味を期待する

新しいモックを作成するとき、expectsメソッドを呼び出す必要があります。正確に何をしますか?その議論はどうですか?

$todoListMock = $this->getMock('\Model\Todo_List');
        $todoListMock->expects($this->any())
            ->method('getItems')
            ->will($this->returnValue(array($itemMock)));

私はどこにも理由を見つけることができません(ドキュメントを試しました)。ソースを読みましたが、理解できません。ありがとう。

40
thom

expects()-メソッドが呼び出される回数を設定します。

$mock = $this->getMock('nameOfTheClass', array('firstMethod','secondMethod','thirdMethod'));
$mock->expects($this->once())
     ->method('firstMethod')
     ->will($this->returnValue('value'));
$mock->expects($this->once())
     ->method('secondMethod')
     ->will($this->returnValue('value'));
$mock->expects($this->once())
     ->method('thirdMethod')
     ->will($this->returnValue('value'));

知っている場合、そのメソッドは一度期待されます$ this-> once()をexpects()で使用し、そうでなければ$ this-> any()を使用します

見る:
複数のexpects()呼び出しを使用したPHPUnitモック

https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.stubs

http://www.slideshare.net/mjlivelyjr/advanced-phpunit-testing

49
Marek Sebera

ソースコードを見ると次のことがわかります。

/**
 * Registers a new expectation in the mock object and returns the match
 * object which can be infused with further details.
 *
 * @param  PHPUnit_Framework_MockObject_Matcher_Invocation $matcher
 * @return PHPUnit_Framework_MockObject_Builder_InvocationMocker
 */
public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher);

また、PHPUnitマニュアルには、利用可能なMatcherがリストされています。

  • any()は、評価対象のメソッドが0回以上実行されたときに一致するマッチャーを返します。
  • never()は、評価対象のメソッドが実行されない場合に一致するマッチャーを返します。
  • atLeastOnce()は、評価対象のメソッドが少なくとも1回実行されたときに一致するマッチャーを返します。
  • once()は、評価対象のメソッドが1回だけ実行されたときに一致するマッチャーを返します。
  • exactly(int $ count)は、評価対象のメソッドが正確に$ count回実行されたときに一致するマッチャーを返します。
  • at(int $ index)は、評価対象のメソッドが指定された$ indexで呼び出されたときに一致するマッチャーを返します。
49
Gordon