PHPUnit: насмешливая функция - PullRequest
3 голосов
/ 11 июля 2010

Можно ли создать макет для функции?

UPD1 :

$class->callback('callback_function');

Я пытался проверить, был ли один раз вызван callback_functionили нет.

Ответы [ 2 ]

3 голосов
/ 11 июля 2010

Собственные функции не могут быть смоделированы.Для этого вам понадобится что-то вроде runkit или patchwork .

Что вы можете сделать, это использовать шаблон стратегии и обернуть вызовы нативных функций в отдельные объекты Command или Closures / Lambdas и использовать их вместо этого.Те могут быть переданы и обменены свободно.

Пример 1 - Использование лямбда-функции:

$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 реализует вещь «меня звали».Либо посмотрите в исходный код, либо добавьте шаблон субъекта / наблюдателя.

2 голосов
/ 25 сентября 2013

Если у вас установлен Runkit, эта библиотека также может работать и предоставляет тот же интерфейс, что и в фиктивной среде PHPUnit:

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

...