Mockery shouldReceive()->once() 似乎不起作用

2022-08-30 23:57:25

我试图让Mockery断言给定的方法至少被调用一次。

我的测试类是:

use \Mockery as m;

class MyTest extends \PHPUnit_Framework_TestCase
{

    public function testSetUriIsCalled()
    {
        $uri = 'http://localhost';
        $httpClient = m::mock('Zend\Http\Client');
        $httpClient->shouldReceive('setUri')->with($uri)->atLeast()->once();
    }

}

如您所见,有一个测试(希望)会产生一种期望,即setUri将被调用。由于不涉及任何其他代码,我无法想象它可以被调用,但我的测试通过了。谁能解释一下为什么?


答案 1

您需要致电以运行验证以满足您的期望。它还处理下一个测试用例的模拟容器的清理。Mockery:close()

public function tearDown()
{
    parent::tearDown();
    m::close();
}

答案 2

为了避免在每个测试类中调用 close 方法,你可以将 TestListener 添加到 phpunit 配置中,如下所示:

<listeners>
    <listener class="\Mockery\Adapter\Phpunit\TestListener"></listener>
</listeners>

文档中介绍了此方法。

从链接的文档中需要注意的一件事是:

确保 Composer 或 Mockery 的自动加载程序存在于引导程序文件中,否则您还需要定义一个指向上述 TestListener 类的文件的“file”属性。


推荐