你可以结合phpunit“完全”和“在”电话?

时间:2012-12-27 20:09:31

标签: phpunit

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

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

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

2 个答案:

答案 0 :(得分:5)

我迟到了,但希望这可以帮助那些正在寻找的人。是的,你可以在()和完全()组合。在您的示例中,它看起来如下所示:

$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');

答案 1 :(得分:-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'));
    }
}
?>