【发布时间】:2010-11-15 21:22:16
【问题描述】:
在 PHPUnit 中,有时断言会失败,当报告断言时,PHPUnit 会自动对变量调用 var_export()。假设您调用了这段代码:
$foo = new StdClass();
$foo->bar = 123;
$foo->baz = "Hi there";
$this->assertTrue($foo);
输出是:
Failed asserting that
stdClass Object
(
[bar] => 123
[baz] => Hi there
)
is true.
如果变量是 Exception 对象,这可能会导致单元测试在遍历对象树时打印出兆字节的文本,包括堆栈跟踪和其他信息。有时 PHPUnit 会死掉,因为它试图输出所有内容时内存不足。
我知道一种解决方案是添加一个额外的测试,在执行 assertTrue 或 assertEquals 之前检查变量是否为对象。但是我的团队目前有很多单元测试。
所以我想知道是否有办法覆盖 PHPUnit 在生成错误报告时对变量调用 var_export 的默认行为。
提前致谢。
【问题讨论】:
-
你总是可以做
$this->assertTrue($foo === true)... -
我不记得 PHP 默认堆栈跟踪是像兆字节这样的东西。你在用 Xdebug 还是什么的?
-
@Jani 我假设他没有谈论轨道跟踪而是转储变量(例如对象)。如果你有一个包含一本书(或 w/e)的成员变量的对象,那么这就是很多输出
标签: php unit-testing phpunit