使用标量时:
$null = null;
$this->assertNull($null);
测试OK
$null = 'not null';
$this->assertNull($null);
测试失败
使用对象时:
$this->assertEquals(null, $menu->getChild('Projects'));
如果$ menu-> getChild('Projects')为null或
,则测试正常或失败$this->assertNull($menu->getChild('Projects'));
挂起并收到错误消息: zend_mm_heap已损坏
使用 AssertNull 时,我没有得到与 AssertEquals(null,$ var)相同的行为; 目前,我禁止使用AssertNull,但我想知道你是否有人能解释发生了什么......
答案 0 :(得分:2)
对象的类型为: Knp \ Menu \ MenuItem (来自knpmenu php库的对象)
问题是与phpunit库中的函数关联的递归问题。
class: PHPUnit / Util / Type
function: recursiveExport
preg_match_all('/\n \[(\w+)\] => Array\s+\*RECURSION\*/', print_r($value, TRUE), $matches);
如您所见,子进程有父对象的引用,这就是死锁的原因。
但当我阅读 print_r 的文档时,声明:
在PHP 4.0.4之前,如果给定一个包含对自身的直接或间接引用的数组或对象,print_r()将永远继续。一个例子是print_r($ GLOBALS),因为$ GLOBALS本身就是一个包含对自身的引用的全局变量。
我正在使用:
Sebastian Bergmann撰写的PHPUnit 3.7.10。
PHP 5.4.7(cli)(建于2012年9月12日23:48:31)
我目前的结论是,不使用 assertNull 但 AssertEquals