我理解术语“ fatal error ”的意义,但我想编写这样的测试类(简化得令人作呕):
class tester {
function execute() {
if( @$this->tryit() === true ) return true;
return false;
}
function tryit() {
$doesntexist = new noobject();
return true;
}
}
实际上我有一个 Test
父类,然后类会扩展它并包含一堆方法和一堆测试。父类将定义 execute
,它只会运行子类中的每个方法(当然不包括 execute
)并收集有关哪些函数通过和哪些函数失败的数据。
我想在实际编写部分代码之前编写测试,但我不想使用 assert
,而是想运行 every 测试并生成一个函数列表其中测试类失败。但这意味着如果测试失败,则意味着存在错误——但我还想处理我忘记定义类等的实例。是否可以这样做,同时又不会让整个脚本死掉?
我原以为脚本会一直失败,直到调用前面带有 @
的函数,然后继续,但显然我错了。有解决方法吗?
最佳答案
fatal error 是致命,您对此无能为力。
解决方案的两个想法可能是:
- 在尝试调用之前测试该方法是否存在;见
method_exists
- 或者,在单独的进程中运行每个“测试”:这样,如果一个测试导致 fatal error ,则只有与该测试对应的“子”进程死亡,而“父”进程,测试启动器,可以检测到这一点并将其视为失败。
其实第二种解法存在于PHPUnit中从 3.4 版开始,如果我没记错的话 ;-)
关于php - 是否可以忽略 PHP 中的 fatal error ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1926370/