我使用PHPUnit进行单元测试,但当触发致命错误时,脚本会中止,导致没有正确的PHPUnit输出。
我希望PHPUnit的输出格式保持正确,因为它会被Eclipse插件读取。实际上,致命错误会停止PHPUnit执行,而在Eclipse中,插件无法解释任何内容(因为PHPUnit脚本出现了错误,而不是处理它)。
谢谢
我使用PHPUnit进行单元测试,但当触发致命错误时,脚本会中止,导致没有正确的PHPUnit输出。
我希望PHPUnit的输出格式保持正确,因为它会被Eclipse插件读取。实际上,致命错误会停止PHPUnit执行,而在Eclipse中,插件无法解释任何内容(因为PHPUnit脚本出现了错误,而不是处理它)。
谢谢
您需要使用PHPUnit的进程隔离功能-在新进程中启动每个测试套件。
phpunit --process-isolation ...
这是确保致命错误不会破坏您的phpunit输出的唯一方法。
进程隔离会使您的测试运行时间增加,因为对于每个单独的测试,都会启动一个新的PHP实例,执行引导等操作。
为了改善这种情况,您可以选择在单独的进程中运行完整的测试用例(@runTestsInSeparateProcesses
),或者仅在已知有时会致命失败的单个测试中运行(@runInSeparateProcess
)。
register_shutdown_function()
,并在--printer中实现了与TeamCity集成。这个月末我会分享源代码。 - Alexander V. Ilyinset_error_handler()在此无法派上用场。您可以使用register_shutdown_function()捕获致命错误。