【问题标题】:How to use mockery to mock global class without namespace?如何使用 mockery 来模拟没有命名空间的全局类?
【发布时间】:2015-09-17 12:56:30
【问题描述】:

我想测试调用此函数https://github.com/Automattic/WPCOM-Related-Posts/blob/master/wpcom-related-posts.php 的 WordPress 应用程序

我不确定如何模拟它,因为 WPCom_Related_Posts 没有命名空间。

这就是我使用类的方式

$related_posts = WPCom_Related_Posts()->get_related_posts( get_queried_object_id(), $args );    

我应该如何在测试中模拟这个get_related_posts,因为这个类会调用 Elasticsearch 来获取相关的帖子,我不想在 PHPUnit 中设置它

【问题讨论】:

    标签: php wordpress unit-testing mockery


    【解决方案1】:

    这很简单:就像你模拟任何其他类一样:

    $mock = Mockery::mock('WPCom_Related_Posts');
    //or, if you want to be explicit:
    $mocl = Mockery::mock('\WPCom_Related_Posts');
    

    关于这个的documentation along with examples 有很多,在第一页,例如:

    $mock = \Mockery::mock('stdClass');
    

    这应该回答了你的问题(stdClass 也没有命名空间(嗯,它在全局 NS 中)。

    不要忘记在每次测试结束时运行\Mockery::close();(在tearDown_after 中,或者在您使用的测试框架中调用的任何名称中)。尤其是当你开始使用期望时

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 2020-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2014-06-24
      相关资源
      最近更新 更多