PHPUnit在索引和调用次数时断言方法调用

时间:2015-06-05 15:58:49

标签: php mocking phpunit

我需要使用不同的参数和返回值断言3个不同的方法调用(相同的方法)。我可以使用$this->at()来做到这一点。我怎样才能断言完全 3调用在何处进行? 通常使用$this->exactly(3)会很容易,但在我的情况下我不能使用它。

1 个答案:

答案 0 :(得分:1)

您想在模拟中使用is.js。然后,您就可以使用exactly(3),它将为每次调用返回正确的值。

PHPUnit文档中略有修改的示例:

public function testReturnValueMapStub()
{
    // Create a stub for the SomeClass class.
    $stub = $this->getMockBuilder('SomeClass')
                 ->getMock();

    // Create a map of arguments to return values.
    $map = array(
      array('a', 'b', 'c', 'd'),
      array('e', 'f', 'g', 'h'),
      array('i', 'j', 'k', 'l'),
    );

    // Configure the stub.
    $stub->expects($this->exactly(3))
         ->method('doSomething')
         ->will($this->returnValueMap($map));

    // $stub->doSomething() returns different values depending on
    // the provided arguments.
    $this->assertEquals('d', $stub->doSomething('a', 'b', 'c'));
    $this->assertEquals('h', $stub->doSomething('e', 'f', 'g'));
}