PHPUnit:致命错误处理

PHPUnit:致命错误处理,php,error-handling,phpunit,fatal-error,Php,Error Handling,Phpunit,Fatal Error,我在单元测试中使用PHPUnit,但是当触发致命错误时,脚本会消失,并且没有正确的PHPUnit输出 我希望PHPUnit输出保持格式正确,因为它是由Eclipse插件读取的。实际上,致命错误停止了PHPUnit,在Eclipse中插件无法解释任何内容(因为PHPUnit脚本有一个错误,而不是处理它) 谢谢设置错误处理程序()在这方面帮不了你。您可以使用捕获致命错误。您需要使用PHPUnit的流程隔离功能—在新流程中启动每个测试套件 phpunit --process-isolation ...

我在单元测试中使用PHPUnit,但是当触发致命错误时,脚本会消失,并且没有正确的PHPUnit输出

我希望PHPUnit输出保持格式正确,因为它是由Eclipse插件读取的。实际上,致命错误停止了PHPUnit,在Eclipse中插件无法解释任何内容(因为PHPUnit脚本有一个错误,而不是处理它)


谢谢

设置错误处理程序()在这方面帮不了你。您可以使用

捕获致命错误。您需要使用PHPUnit的流程隔离功能—在新流程中启动每个测试套件

phpunit --process-isolation ...
这是确保致命错误不会破坏phpunit输出的唯一方法

执行时间 进程隔离会增加您的测试运行时间,因为对于每个测试,都会启动一个新的PHP实例,并执行引导等


为了修正这种情况,您可以选择在一个单独的进程中运行完整的测试用例(
@runtestsinseparateprocesss
),或者只运行一个已知有时会致命的测试用例(
@runinsepparateprocess
)。

如前所述,我希望有一个PHPUnit错误(我希望PHPUnit输出不会出错)。我已经扩展了问题的描述。什么样的致命错误?如果它们是语法或语义相关的,那么你就不走运了。尽管这确实大大增加了测试的执行。在一个小应用程序上只进行了150次测试,从4秒到90秒。您可以禁用“备份全局”以获得更好的测试速度。这还取决于引导文件的速度。--当我尝试运行7000多个测试时,进程隔离可能会造成巨大的大脑损伤,我在TeamCity集成的--bootstrap and--printer中使用了
register\u shutdown\u function()。我将在本月晚些时候分享资料来源。