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