【问题标题】:PHPUnit : Fatal error handlingPHPUnit:致命错误处理
【发布时间】:2011-04-19 23:07:57
【问题描述】:

我使用 PHPUnit 进行单元测试,但是当触发 致命错误 时,脚本死亡并且我没有正确的 PHPUnit 输出。

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

谢谢

【问题讨论】:

  • 什么样的致命错误?如果它们与语法或语义相关,那么你就不走运了。

标签: php error-handling phpunit fatal-error


【解决方案1】:

您需要使用 PHPUnit 的进程隔离功能 - 在新进程中启动每个测试套件。

phpunit --process-isolation ...

这是确保致命错误不会破坏您的 phpunit 输出的唯一方法。

执行时间

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

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

【讨论】:

  • 请注意,尽管它确实大大增加了测试执行。在一个小应用上只进行了 150 次测试,从 4 秒缩短到 90 秒。
  • 您可以即禁用“备份全局”以获得更好的测试速度。它还取决于引导文件的速度。
  • --process-isolation 会在我尝试运行 7000 多个测试时造成巨大的脑损伤,我在 --bootstrap 和 --printer 中使用 register_shutdown_function() 进行 TeamCity 集成。我将在本月晚些时候分享资源。
【解决方案2】:

set_error_handler() 在那里帮不了你。您可以使用register_shutdown_function() 捕获致命错误

【讨论】:

  • 如前所述,我想要一个 PHPUnit 错误(我希望 phpunit 输出不会被弄乱)。我已经扩展了问题的描述。
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 2013-08-13
  • 2022-01-02
  • 2018-09-07
相关资源
最近更新 更多