如何在没有命名空间的情况下使用嘲弄来模拟全局class?

How to use mockery to mock global class without namespace?

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

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

我就是这样使用 class

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

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

中设置它

这很简单:就像你嘲笑其他人一样class:

$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 中,或者在测试中调用的任何内容您正在使用的框架)。特别是当你开始使用 expectations