Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit-如何测试是否调用回调?_Php_Callback_Phpunit - Fatal编程技术网

PHPUnit-如何测试是否调用回调?

PHPUnit-如何测试是否调用回调?,php,callback,phpunit,Php,Callback,Phpunit,根据以下方法: public function foo($callback) { call_user_func($callback); } 我如何使用PHPUnit测试回调是否被调用?foo()方法没有返回值。它唯一的任务是执行给定给它的回调,以及其他一些查找和杂项。为了简单起见,我省略了处理 我试过这样的方法: public method testFoo() { $test = $this; $this->obj->foo(function() use (

根据以下方法:

public function foo($callback) {
    call_user_func($callback);
}
我如何使用PHPUnit测试回调是否被调用?
foo()
方法没有返回值。它唯一的任务是执行给定给它的回调,以及其他一些查找和杂项。为了简单起见,我省略了处理

我试过这样的方法:

public method testFoo() {
    $test = $this;
    $this->obj->foo(function() use ($test) {
        $test->pass();
    });
    $this->fail();
}

…但是显然没有
pass()
方法,所以这不起作用。

要测试某个东西是否被调用,您需要创建一个,并将其配置为预期被调用N次

下面是一个使用对象回调(未测试)的解决方案:

如果从未调用或多次调用
$mock->myCallBack()
,PHPUnit将自动使测试失败


我使用了
stdClass
及其方法
myCallBack()
,因为我不确定是否可以模拟示例中的全局函数。我可能错了

您可以让回调函数设置一个局部变量,并断言它已设置

public function testFoo() {
    $called = false;
    $this->obj->foo(function() use (&$called) {
        $called = true;
    });
    self::assertTrue($called, 'Callback should be called');
}

谢谢这很有效。我省略了
will()
调用,因为回调实际上不需要做任何事情。非常简单有效。非常感谢。
public function testFoo() {
    $called = false;
    $this->obj->foo(function() use (&$called) {
        $called = true;
    });
    self::assertTrue($called, 'Callback should be called');
}