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 回答