[英]PHPUnit - How to test if callback gets called?
給出以下方法:
public function foo($callback) {
call_user_func($callback);
}
我如何使用PHPUnit測試實際調用的回調? foo()
方法沒有返回值。 它唯一的工作是執行一個給它的回調,以及其他一些查找和misc。 我為了簡單起見而遺漏的處理。
我試過這樣的事情:
public method testFoo() {
$test = $this;
$this->obj->foo(function() use ($test) {
$test->pass();
});
$this->fail();
}
...但顯然沒有pass()
方法,所以這不起作用。
要測試是否調用了某些內容,您需要創建一個模擬測試double並將其配置為期望被調用N次。
這是使用對象回調(未經測試)的解決方案:
public method testFoo() {
$test = $this;
$mock = $this->getMock('stdClass', array('myCallBack'));
$mock->expects($this->once())
->method('myCallBack')
->will($this->returnValue(true));
$this->obj->foo(array($mock, 'myCallBack'));
}
如果從不調用$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');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.