是否可以忽略PHP中的致命错误?

Car*_*ers 2 php error-handling unit-testing

我理解"致命错误"一词的意义,但我想编写一个这样的测试类(令人厌恶的简化):

class tester {

    function execute() {

        if( @$this->tryit() === true ) return true;
        return false;

    }

    function tryit() {

        $doesntexist = new noobject();
        return true;

    }

}
Run Code Online (Sandbox Code Playgroud)

实际上我有一个Test父类,然后类会扩展它并包含一堆带有一堆测试的方法.父类将定义execute并且它将只运行子类中的每个方法(execute当然不包括)并收集有关哪些函数通过以及哪些函数失败的数据.

我想在实际编写部分代码之前编写测试,但不是使用assert我只想运行每个测试并生成一个列表,列出哪些测试类失败的功能.但这意味着如果测试失败则意味着存在错误 - 但我也想处理我忘记定义类等的实例.是否可以这样做,而不是让整个脚本死掉?

我以为脚本会失败,直到函数调用@它前面,然后继续,但显然我错了.有解决方法吗?

Pas*_*TIN 7

致命错误是致命的,你无能为力.

解决方案的两个想法可能是:

  • 在尝试调用之前测试方法是否存在; 看到method_exists
  • 或者,在一个单独的进程中运行每个"测试":这样,如果一个测试导致致命错误,只有与该测试相对应的"子"进程死亡,而"父"进程,测试启动器,可以检测到这一点并将其视为失败.

实际上,第二个解决方案存在于3.4版本的PHPUnit中,如果我没记错的话;-)