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

时间:2013-04-16 11:11:19

标签: php mockery

我试图让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将被调用的测试。由于没有涉及任何其他代码,我无法想象可以被调用,但我的测试通过了。任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:46)

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

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

答案 1 :(得分:2)

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

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

docs中解释了这种方法。

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

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