我了解“致命错误”一词的含义,但我想编写一个这样的测试类(令人讨厌地简化):

class tester {

    function execute() {

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

    }

    function tryit() {

        $doesntexist = new noobject();
        return true;

    }

}

实际上,我会有一个Test父类,然后类将对其进行扩展,并包含带有一堆测试的一堆方法。父类将定义execute,它将仅运行子类中的每个方法(当然不包括execute)并收集函数通过和失败的数据。

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

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

最佳答案

致命错误是致命致命,您无能为力。

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

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

  • 实际上,如果我没有记错的话,第二个解决方案存在于3.4版之后的PHPUnit中;

    10-07 20:05