我有一个看起来像这样的测试方法:
$row = $this->GetRowFromUserTable($id);
$this->assertLessThan(time(), time($row['last_update']));
当$ row为null时,访问$ row ['last_update']应触发E_NOTICE,此测试应该失败,但事实并非如此。
这个代码在第一个断言失败,所以我知道$ row为null(fixture是相同的):
$row = $this->GetRowFromUserTable($id);
$this->assertNotNull($row);
$this->assertLessThan(time(), time($row['last_update']));
当我写这篇文章时:
$row = $this->GetRowFromUserTable($id);
$this->assertEquals(E_ALL, error_reporting());
$this->assertLessThan(time(), time($row['last_update']));
它成功了,所以我也确定error_reporting是正确的,这种情况必须与PHPUnit有关。
我使用PHPUnit 3.5.6
我读到了这个问题: Can I make PHPUnit fail if the code throws a notice? 但答案建议使用较新版本的PHPUnit,但答案是从2009年开始,所以不是。
编辑:我使用NetBeans IDE 6.9.1来运行我的测试。
答案 0 :(得分:2)
据说“convertNoticesToExceptions”也是我唯一真正的猜测(+1)。
你可以在测试用例的某个地方写一个$foo = $undefinedVariable;
来查看是否也不会触发通知//不会使测试失败?
要检查您的phpunit / php安装是否正常工作(并且可能缩小问题范围),您可以尝试:
<?php
class myTest extends PHPUnit_Framework_TestCase {
public function testFoo() {
$x = $foo;
$this->assertTrue(true);
}
}
并运行(注意--no-configuration部分只是为了确保你不会意外地选择phpunit.dist.xml或phpunit.xml)
phpunit --no-configuration foo.php
显示输出:
Sebastian Bergmann的PHPUnit 3.5.6。
电子
时间:0秒,内存:2.50Mb
有1个错误:
1)myTest :: testFoo未定义的变量: FOO
/home/user/foo.php:5
也许这有助于一个小小的
答案 1 :(得分:2)
您描述的具体案例不会提供E_NOTICE
。访问已定义数组的未定义键会产生E_NOTICE
,但奇怪的是尝试访问空值而不像数组那样。
答案 2 :(得分:1)
您是否将convertNoticesToExceptions配置属性设置为“true”?