PHPUnit:致命错误处理
我使用 PHPUnit 进行单元测试,但是当触发致命错误时,脚本死亡并且我没有正确的 PHPUnit 输出。
我希望 PHPUnit 输出保持格式正确,因为它是由 Eclipse 插件读取的。实际上,致命错误会停止 PHPUnit,并且在 Eclipse 中插件无法解释任何内容(因为 PHPUnit 脚本有错误,而不是处理它)。
谢谢
I use PHPUnit for unit tests, but when a fatal error is triggered, the script dies and I have no correct PHPUnit output.
I'd like that the PHPUnit output stays correctly formated, because it is read by a plugin for Eclipse. Actually the fatal error stops PHPUnit and in Eclipse the plugin can't interpret anything (because the PHPUnit script had an error, instead of handling it).
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用 PHPUnit 的进程隔离功能 - 在新进程中启动每个测试套件。
这是确保致命错误不会破坏 phpunit 输出的唯一方法。
执行时间
进程隔离会成倍增加您的测试运行时间,因为对于每个测试,都会启动一个新的 PHP 实例,执行引导程序等。
要修改这种情况,您可以选择在一个单独的进程 (
@runTestsInSeparateProcesses
),或仅已知有时会致命的单个进程 (@runInSeparateProcess
)。You need to use PHPUnit's process isolation features - start each test suite in a new process.
This is the only way to make sure fatal errors don't break your phpunit output.
Execution time
Process isolation multiplies your test run time, because for each single test, a new PHP instance is started, the bootstrap is executed etc.
To amend this situation, you may choose to run full test cases in a separate process (
@runTestsInSeparateProcesses
), or only single ones that are known to fatal out sometimes (@runInSeparateProcess
).set_error_handler() 不会帮助你。您可以使用 register_shutdown_function() 捕获致命错误
set_error_handler() won't help you there. You can catch fatal errors using register_shutdown_function()