如何使用 mockery 来模拟没有命名空间的全局类?
Posted
技术标签:
【中文标题】如何使用 mockery 来模拟没有命名空间的全局类?【英文标题】:How to use mockery to mock global class without namespace? 【发布时间】: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 中设置它
【问题讨论】:
【参考方案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
中,或者在您使用的测试框架中调用的任何名称中)。尤其是当你开始使用期望时
【讨论】:
以上是关于如何使用 mockery 来模拟没有命名空间的全局类?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5 - 使用 Mockery 模拟 Eloquent 模型
如何使用 Mockery 模拟嵌套对象,如 GuzzleHttp 请求