是否可以为函数创建模拟?
UPD1 :
$class->callback('callback_function');
我试过测试callback_function
是否曾被调用过一次。
答案 0 :(得分:3)
无法模拟本机函数。您需要runkit或patchwork这样的内容。
您可以做的是使用Strategy Pattern并将本机函数调用包装到单独的Command Objects或Closures / Lambdas中,然后使用它们。这些可以自由传递和交换。
示例1 - 使用Lambda函数:
$callback = function() {
// a native function in here
}
$class->callback($callback);
示例2 - 使用命令对象:
interface ICommand
{
public function execute();
}
class Callback implements ICommand
{
public function execute()
{
// a native function in here
}
}
$class->callback(array('Callback', 'execute'));
然后,您可以轻松地模拟这些回调。我不确定PHPUnit如何实现'我被称为'的东西。查看源代码或添加主题/观察者模式。
答案 1 :(得分:2)
如果你安装了Runkit,这个库也可以工作,并为你提供与PHPUnit的模拟框架相同的流畅界面: