PHPUnit:致命错误处理

22

我使用PHPUnit进行单元测试,但当触发致命错误时,脚本会中止,导致没有正确的PHPUnit输出。

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

谢谢


什么样的致命错误?如果它们与语法或语义有关,那你就没什么希望了。 - bcosca
2个回答

30

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

phpunit --process-isolation ...

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

执行时间

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

为了改善这种情况,您可以选择在单独的进程中运行完整的测试用例(@runTestsInSeparateProcesses),或者仅在已知有时会致命失败的单个测试中运行(@runInSeparateProcess)。


1
请注意,这会显著增加测试执行时间。在一个小应用程序上,仅进行150个测试,测试执行时间从4秒增加到了90秒。 - Stephane Gosselin
你可以禁用“备份全局变量”以获得更好的测试速度。这还取决于您的引导文件的速度。 - cweiske
--process-isolation在尝试运行7000多个测试时可能会导致严重的脑力损伤,我在--bootstrap中使用了register_shutdown_function(),并在--printer中实现了与TeamCity集成。这个月末我会分享源代码。 - Alexander V. Ilyin

2

正如所说,我想要一个PHPUnit错误(我希望phpunit输出不会被搞乱)。我已经扩展了问题的描述。 - Matthieu Napoli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接