你能把phpunit组合起来吗;正是;及;at";电话?

你能把phpunit组合起来吗;正是;及;at";电话?,phpunit,Phpunit,我在测试中使用了一个模拟类,我正在寻找一种方法来同时确保一个方法被调用两次,每次调用都有不同的参数。我的代码类似于: $mocked->expects($this->at(0))->method('mockedMethod')->with($this->equalsTo(123); $mocked->expects($this->at(1))->method('mockedMethod')->with($this->equalsTo(4

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

$mocked->expects($this->at(0))->method('mockedMethod')->with($this->equalsTo(123);
$mocked->expects($this->at(1))->method('mockedMethod')->with($this->equalsTo(456);
如果第三次调用mockedMethod,不管参数如何,我希望断言失败。


<?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'));
    }
}
?>

我参加聚会迟到了,但希望这对正在寻找的人有所帮助。是的,您可以将at()和exactly()组合起来。在您的示例中,它看起来如下所示:

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

这个测试实际上没有测试任何东西我已经提供了一个他试图完成的例子,我假设开发人员可以从那里连接点。此外,该测试有一个模拟类、一个期望和两个断言。。。这个“不测试”到底是怎么回事?顺便说一句,这个测试直接来自PHPUnit文档,那么你是说制作PHPUnit的人错了吗?LOLI回应了你的评论和否决票,很明显我对你的说法提出了异议,即PHPUnit测试作为这个问题的一个例子,直接来自官方PHPUnit文档,实际上测试了一些东西。所有的戏剧都是你的。虽然这个代码片段是受欢迎的,并且可能会提供一些帮助,但它将是如何以及为什么解决这个问题的。记住,你是在将来回答读者的问题,而不仅仅是现在提问的人!请在回答中添加解释,并说明适用的限制和假设。