3

我有一个在测试中使用的模拟类,我正在寻找一种方法来同时确保一个方法被准确地调用两次并且每次调用都有不同的参数。我的代码是这样的:

$mocked->expects($this->at(0))->method('mockedMethod')->with($this->equalsTo(123);
$mocked->expects($this->at(1))->method('mockedMethod')->with($this->equalsTo(456);

如果对 mockedMethod 进行第三次调用,无论参数如何,我都希望断言失败。

4

2 回答 2

5

我参加聚会迟到了,但希望这对正在寻找的人有所帮助。是的,您可以结合 at() 和 exact()。在您的示例中,它看起来类似于以下内容:

$mocked->expects($this->at(0))->method('mockedMethod')->with($this->equalsTo(123);
$mocked->expects($this->at(1))->method('mockedMethod')->with($this->equalsTo(456);
$mocked->expects($this->exactly(2))->method('mockedMethod');
于 2014-04-21T19:23:55.403 回答
-3
<?php
require_once 'SomeClass.php';

class StubTest extends PHPUnit_Framework_TestCase
{
    public function testReturnArgumentStub()
    {
        // Create a stub for the SomeClass class.
        $stub = $this->getMock('SomeClass');

        // Configure the stub.
        $stub->expects($this->any())
             ->method('doSomething')
             ->will($this->returnArgument(0));

        // $stub->doSomething('foo') returns 'foo'
        $this->assertEquals('foo', $stub->doSomething('foo'));

        // $stub->doSomething('bar') returns 'bar'
        $this->assertEquals('bar', $stub->doSomething('bar'));
    }
}
?>
于 2012-12-29T00:41:14.930 回答