PHPunit - 错误
Posted
技术标签:
【中文标题】PHPunit - 错误【英文标题】:PHPunit - Errors 【发布时间】:2011-04-03 22:45:04 【问题描述】:当发生 phpunit 框架不希望发生的错误时,测试停止,PHP 抛出错误,但 PHPunit 不会记录这是一个错误。如何确保 PHPunit 将其记录为错误。
【问题讨论】:
你能扩展一下吗?你在说什么样的错误? phpunit的预期输出是多少,实际输出是多少? 所以据我了解,PHPunit 有断言、失败和错误。因此,可以说代码中存在语法错误。额外的逗号或缺少分号。这会导致某个测试无法运行,测试会停止,但是 PHPunit 不会将其报告为错误,并且 php 会输出错误,但是 PHPunit 没有记录此问题。有没有办法强制 PHPunit 记录语法错误,而不仅仅是逻辑代码断言? 你能提供一个说明性的测试用例吗(认真) 如果我有一个用户类,并且在这个类中我有一个注册函数。我创建了一个 TestCase 来注册用户。如果原始用户类中的语法关闭,PHPunit 将停止测试额外的测试,PHP 会抛出错误,而 PHPunit 不会记录任何错误或失败。我为含糊而道歉。 这是我运行 AllTests 脚本时的输出(没有实际的 SQL 查询)。塞巴斯蒂安伯格曼的 PHPUnit 3.4.14。 ................................mysqlNet::write() 错误:插入表(标题,titleSlug,description. ...) values(...,):table 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ')' 附近使用正确的语法 【参考方案1】:免责声明,我是 PHPUnit 的新手,我也在试图弄清楚“发生错误时会发生什么”。
来自PHPUnit's docs:
当测试代码包含 PHP 语法错误时,TextUI 测试运行程序可能会退出而不打印错误信息。标准测试套件加载器可以选择检查测试套件源文件是否存在 PHP 语法错误,但不能检查测试套件源文件包含的源文件。
还有选项:
--syntax-check Try to check source files for syntax errors.
【讨论】:
查看我对原始问题的最后评论。 (默认隐藏。)似乎没有 PHP 语法错误;只是一个 SQL 语法错误。 @janmoesen 我知道,但是在 cmets 中,OP 还说,“所以可以说代码中存在语法错误。额外的逗号或缺少分号。这将导致某个测试无法运行,测试将停止,但 PHPunit 不会将其报告为错误,并且 php 会输出错误,但 PHPunit 没有记录。”【参考方案2】: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。
【讨论】:
【参考方案3】:您需要使用正常的 PHP 错误捕获来捕获错误以避免操作系统崩溃,当 PHP 解释器遇到错误时会发生这种情况。
在提交到您的主要开发流程之前,应检查和测试自动化测试。
我从 PHPUnit (phpunit ... > PHPUnit.log) 捕获输出,然后解析它以查找 PHPUnit 的状态(成功,跳过/不完整,OK,FAILURE 等...),如果不是找到了,那我就知道PHPUnit没有完成,出现了错误。错误的结果也将被转储到终端,因为我的 PHP 配置为显示错误。
如果出现错误,我只需将此日志文件邮寄给开发团队或最后更改测试文件的人,以进行调查。如果脚本试图确定发送邮件的根本原因/人,则电子邮件的逻辑可能会变得复杂。通常,脚本会通过电子邮件发送给我自己进行调查,如果我不在或无法立即调查,开发团队会在电子邮件中抄送。
【讨论】:
以上是关于PHPunit - 错误的主要内容,如果未能解决你的问题,请参考以下文章
PHPUnit 类“错误”不扩展 PHPUnit_Framework_TestCase
PHPUnit CodeIgniter 生成夹具 PHP 致命错误:找不到类“PHPUnit_Framework_TestCase”