3

使用标量时:

$null = null;
$this->assertNull($null);

测试OK

$null = 'not null';
$this->assertNull($null);

测试失败

使用对象时:

$this->assertEquals(null, $menu->getChild('Projects'));

关于 $menu->getChild('Projects') 是否为空的测试 OK 或 Fail

$this->assertNull($menu->getChild('Projects'));

挂起,我收到错误:zend_mm_heap 已损坏

使用AssertNull时,我没有得到与AssertEquals(null, $var)相同的行为;目前,我禁止使用 AssertNull,但我想知道你们中的某个人是否可以解释发生了什么......

4

1 回答 1

2

该对象的类型为:Knp\Menu\MenuItem(来自 knpmenu php 库的对象)

问题是与 phpunit 库中的函数相关的递归问题。

类:PHPUnit/Util/Type

功能:递归导出

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 本身就是一个包含对自身的引用的全局变量。

我在用着 :

塞巴斯蒂安伯格曼的 PHPUnit 3.7.10。

PHP 5.4.7 (cli)(构建时间:2012 年 9 月 12 日 23:48:31)

我目前的结论是使用assertNull而是使用AssertEquals

于 2012-12-07T15:22:26.353 回答