PHPUnit:模拟函数

时间:2010-07-11 03:46:46

标签: php tdd phpunit

是否可以为函数创建模拟?

UPD1

$class->callback('callback_function');

我试过测试callback_function是否曾被调用过一次。

2 个答案:

答案 0 :(得分:3)

无法模拟本机函数。您需要runkitpatchwork这样的内容。

您可以做的是使用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的模拟框架相同的流畅界面:

https://github.com/tcz/phpunit-mockfunction