7

PHPUnit を使用して、メソッドが正しい順序で呼び出されることをテストしたいと考えています。

->at()モック オブジェクトを使用した最初の試みはうまくいきませんでした。たとえば、次のことが失敗すると予想していましたが、そうではありません。

  public function test_at_constraint()
  {
    $x = $this->getMock('FirstSecond', array('first', 'second'));
    $x->expects($this->at(0))->method('first');
    $x->expects($this->at(1))->method('second');

    $x->second();
    $x->first();
  }      

物事が間違った順序で呼び出された場合に失敗を余儀なくされたと私が考えることができる唯一の方法は、次のようなものでした:

  public function test_at_constraint_with_exception()
  { 
    $x = $this->getMock('FirstSecond', array('first', 'second'));

    $x->expects($this->at(0))->method('first');
    $x->expects($this->at(1))->method('first')
      ->will($this->throwException(new Exception("called at wrong index")));

    $x->expects($this->at(1))->method('second');
    $x->expects($this->at(0))->method('second')
      ->will($this->throwException(new Exception("called at wrong index")));

    $x->second();
    $x->first();
  }

これを行うよりエレガントな方法はありますか?ありがとう!

4

1 に答える 1

8

InvocationMocker期待を機能させるには、何らかの関与が必要です。たとえば、これはうまくいくはずです:

public function test_at_constraint()
{
    $x = $this->getMock('FirstSecond', array('first', 'second'));
    $x->expects($this->at(0))->method('first')->with();
    $x->expects($this->at(1))->method('second')->with();

    $x->second();
    $x->first();
}  
于 2013-04-02T14:51:46.333 に答える