我正在尝试用我的WordPress插件做tdd。问题是使用WP_UnitTestCase是减慢速度的方法,尽管名称提供了集成测试而不是单元测试。因此,我不是使用WP_UnitTestCase而是为我的插件创建真正独立的测试,但问题是我发现自己使用了很多WordPress全局函数,例如wp_get_current_user()或wp_signon()。
目前我有一个我已经使用过的函数文件,这些文件基本上已被删除了。
嘲笑这些功能的最佳方法是什么?最后,我希望能够以与其他方法相同的方式模拟这些函数,并能够控制它们的输出并测试它们的被调用。是否有更多OO方式来设置当前用户或检查我缺少的身份验证?
答案 0 :(得分:2)
您可以创建一个用于调用全局WordPress函数的类。这可以有一个全局函数方法的映射,甚至可以使用wp_
或者你提出的任何其他方式调用以__call
开头的任何方法。
然后你可以在你的插件中使用这个类来调用这些函数。我想插件是由WordPress实例化的,所以你将无法在生产代码上注入这个类。因此,您可以在外部设置它以允许注入模拟,但如果没有提供,请使用真实的。
像这样:
<?php
class Plugin
{
private $invoker;
public function getWpInvoker()
{
if (!isset($this->invoker)) {
$this->invoker = new WordPressGlobalFunctionsInvoker();
}
}
public function setWpInvoker(WordPressGlobalFunctionsInvoker $invoker)
{
$this->wp_invoker = $invoker;
}
public function foo()
{
$current_user = $this->getWpInvoker()->wp_get_current_user();
}
}
在测试中,您将模拟WordPressGlobalFunctionsInvoker
类并将模拟注入插件,以便控制所调用的函数。