【问题标题】:Mockery ordered mocks嘲弄下令嘲笑
【发布时间】:2014-10-27 17:53:42
【问题描述】:

所以基本上我试图模拟我对控制器的依赖,我想使用 Mockery 的ordered() 功能。

    $request = \Mockery::mock('Silhouette\Http\Request');
    $response = \Mockery::mock('Silhouette\Http\Response');
    $response->shouldReceive("setContent")->ordered();

    $db = \Mockery::mock('Dabble\Database');

    $configData = \Mockery::mock('Silhouette\Configuration\ConfigurationData');
    $configData->shouldReceive("get")->andReturn(array(18, 23))->ordered();

即使在控制器中 $response->setContent() 之前调用了 $configData->get(),上述测试也是成功的。 此外,如果我颠倒模拟的顺序,我仍然可以成功测试。

    $request = \Mockery::mock('Silhouette\Http\Request');

    $db = \Mockery::mock('Dabble\Database');

    $configData = \Mockery::mock('Silhouette\Configuration\ConfigurationData');
    $configData->shouldReceive("get")->andReturn(array(18, 23))->ordered();

    $response = \Mockery::mock('Silhouette\Http\Response');
    $response->shouldReceive("setContent")->ordered();

知道我在这里做错了什么吗?谢谢

【问题讨论】:

    标签: php unit-testing phpunit mockery


    【解决方案1】:

    问题在于排序仅适用于同一个 Mock,除非您使用 globally() 方法使订单与不同的 Mock 一起工作。

    试试

    $request = \Mockery::mock('Silhouette\Http\Request');
    $response = \Mockery::mock('Silhouette\Http\Response');
    $response->shouldReceive("setContent")->globally()->ordered();
    
    $db = \Mockery::mock('Dabble\Database');
    
    $configData = \Mockery::mock('Silhouette\Configuration\ConfigurationData');
    $configData->shouldReceive("get")->andReturn(array(18, 23))->globally()->ordered();
    

    这在文档中有解释:

    http://docs.mockery.io/en/latest/reference/expectations.html

    【讨论】:

    • 声明这个方法应该按照与类似标记方法相关的特定顺序被调用。所以它们的意思是同一个模拟对象的方法。谢谢!
    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 2019-08-03
    • 2016-10-02
    • 2019-12-20
    • 1970-01-01
    • 2010-09-23
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多