2010-08-25 88 views
5

当PHPunit框架不期望发生的错误发生时,测试停止,并且PHP引发错误,但PHPunit不记录它是错误。我如何确保PHPunit将其记录为错误。PHPunit - 错误

+1

你可以扩展吗?你在说什么样的错误? phpunit的预期输出是什么,实际输出是多少? – janmoesen 2010-08-25 20:25:53

+0

所以PHPunit根据我的理解有断言,失败和错误。所以,让我们说在代码中有一个语法错误。一个额外的逗号或缺少的分号。这将导致某些测试无法运行,并且测试将停止,但PHPunit不会将其报告为错误,并且php将输出错误,但PHPunit没有记录此错误。有没有办法强制PHPunit记录类似语法错误的东西,而不仅仅是逻辑代码断言? – Anthony 2010-08-25 20:50:18

+0

你能为此提供一个说明性的TestCase吗(认真) – Gordon 2010-08-25 20:53:29

回答

5

声明,我是PHPUnit的新手,我试图弄清楚“发生错误时会发生什么”。

PHPUnit's docs

When the tested code contains PHP syntax errors, the TextUI test runner might exit without printing error information. The standard test suite loader can optionally check the test suite sourcefile for PHP syntax errors, but not sourcefiles included by the test suite sourcefile.

和期权:

--syntax-check   Try to check source files for syntax errors. 
+0

看到我最后一次对原始问题的评论。 (它默认是隐藏的。)似乎没有PHP语法错误;仅仅是一个SQL语法错误。 – janmoesen 2010-08-31 07:55:59

+0

@janmoesen我知道,但在OP的评论中还说:“所以我们可以说代码中有一个语法错误,一个额外的逗号或缺少的分号,这会导致某个测试不能运行,并且测试将停止,但PHPunit不会将其报告为错误,并且php将输出该错误,但PHPunit没有记录此信息。“ – 2010-08-31 21:10:21

0

什么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。

0

您需要使用正常的PHP错误捕获来捕获错误,以避免在PHP解释器遇到错误时发生操作系统崩溃。

自动化测试应在对您的主要开发流进行承诺之前进行检查和测试。

我捕获PHPUnit(phpunit ...> PHPUnit.log)的输出,然后我从PHPUnit(成功跳过/不完整,OK,FAILURE等)中解析状态,如果这是没有找到,那么我知道PHPUnit没有完成,并发生错误。由于我的PHP配置为显示错误,错误的结果也将被转储到终端。

出现错误时,我只需将此日志文件发送给开发团队或上次更改测试文件的人员进行调查。如果脚本尝试确定发送邮件的根本原因/人员,则电子邮件的逻辑可能会变得复杂。通常情况下,脚本会通过电子邮件发送给我自己进行调查,并且开发小组会在电子邮件中抄送,以防我不在的情况下立即进行调查。