当PHPunit框架不希望发生的错误发生时,测试会停止,PHP会抛出错误,但是PHPunit不会记录它是一个错误。如何确保PHPunit将其记录为错误。
来自PHPUnit文档:
当被测试的代码包含PHP语法错误时,TextUI测试运行器可能会退出而不打印错误信息。标准测试套件加载器可以选择检查测试套件源文件中的PHP语法错误,但不能检查测试套件源文件包含的源文件。
还有这个选项:
--syntax-check Try to check source files for syntax errors.
OP所说的是语法或PHP错误会导致PHPUnit崩溃。 PHP致命错误会使PHP解释器崩溃(或者至少导致其停止),这意味着PHPUnit无法继续执行。
如果您真的想避免这种情况,可以在脚本中添加以下一些内容。此脚本假定脚本位于测试目录(./)中,并且代码树从../开始(类似于正常的ZendFramework 1设置)。不要使用此脚本进行代码覆盖率,它仅对最后一次运行的单元测试正确:
#!/bin/bash
for i in $(find ../ -name "*.php"); do
msg=`php -l $i`
if [ "$?" != "0" ]; then
echo $msg;
fi
done
for i in $(find ./ -name "*Test.php"); do
echo "Running Test: $i";
phpunit $i
done
HTH.
为避免 PHP 解释器遇到错误时崩溃操作系统,您需要使用常规的 PHP 错误捕获来捕获错误。
在提交到主开发流之前,应检查和测试自动化测试。
我捕获 PHPUnit 的输出(phpunit ... > PHPUnit.log),然后解析 PHPUnit 的状态(Success with Skipped/Incomplete、OK、FAILURE 等),如果找不到这些状态,则知道 PHPUnit 没有完成,发生了错误。由于我的 PHP 配置显示错误,因此错误的结果也已转储到终端。
出现错误时,我只需将此日志文件发送到开发团队或最后更改测试文件的人进行调查。如果脚本尝试决定发送电子邮件的根本原因/人员,则可能会产生复杂的电子邮件逻辑。通常,脚本会向我发送电子邮件以进行调查,并且开发团队会被 CC 到电子邮件中,以防我不在或无法立即进行调查。
mysqlNet
类没有简单地echo
出那个错误吗?这不是 PHP 语法错误,而是 SQL 语法错误。我认为你的类并没有简单地trigger_error
或者throw
任何东西,而是输出了错误然后退出。请确认一下。 - janmoesen