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');
}