我一直试图解决这个问题很长一段时间。
我有一个简单的PHPUnit测试用例,包含2个测试。当我运行它时,我得到了这个输出:
PHPUnit 3.5.14 by Sebastian Bergmann.
.
所以第一个断言运行,传递。然而,第二个断言导致一些PHP错误(异常或其他),并且PHPUnit在没有任何关于可能出错的信息的情况下死掉。
这是我的phpunit.xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="true"
syntaxCheck="false"
bootstrap="bootstrap.php.cache"
>
<testsuites>
<testsuite name="Portal Test Suite">
<directory>../src/OneSolution/Portal/*Bundle/Tests</directory>
</testsuite>
</testsuites>
</phpunit>
将syntaxCheck
设置为true
不会提供有关错误的任何其他信息。但是,它会打印The filename, directory name, or volume label syntax is incorrect.
???
那么,有没有人有任何想法可以做些什么来让PHPUnit报告这些错误消息(--verbose
选项也无济于事?)
编辑:我发现了导致测试失败的原因。有一个错误的方法名称(我猜太依赖于代码辅助)。但是,这并不能解决主要问题。 PHPUnit 未报告任何警告,错误或异常。
答案 0 :(得分:15)
好的,所以如果有人从PHPUnit命令行中获取无输出或不完整的输出有问题,请仔细检查php.ini
配置指令:
error_reporting
- 应为您的开发环境设置为E_ALL | E_STRICT
display_errors
- 应设置为On
答案 1 :(得分:1)
即使启用了所有错误报告,我也遇到了同样的问题。
我尝试将echo
语句放入我的测试和setUp
方法中以找出它挂起的位置,但它们从未出现过。问题原来是PHP的输出缓冲。当我在测试中添加以下方法时:
protected function debug($text)
{
echo "\nDEBUG: $text\n";
flush();
ob_flush();
}
并使用$this->debug()
而不是普通echo
,我能够看到我的调试语句。通过代码进行二进制搜索很快就会导致问题的根源(在我的情况下,数据库夹具无效)。