对不起另一个'phpunit不起作用'的问题.它曾经工作多年了.今天我重新安装了PEAR和phpunit,原因与此问题无关.现在,当我像往常一样运行phpunit时.什么都没发生.cli只是向我展示了一条新线,没有任何输出.
有没有人遇到过这个问题,或者有什么可能导致它的问题.
PHPUnit Version: 3.5.15
PEAR Version: 1.9.4
PHP Version: 5.3.8
Windows 7
Run Code Online (Sandbox Code Playgroud)
Bet*_*ide 56
我在OSX和MAMP上.要获取错误消息,我必须调整以下条目php.ini:
display_errors = On
display_startup_errors = On
Run Code Online (Sandbox Code Playgroud)
请注意,这不得不进入/Applications/MAMP/bin/php/php5.3.6/conf/php.ini.
Ahm*_*jar 42
为了将来参考,对于那些面临任何PHPUnit问题的人,以及PHPUnit静默失败,只需在phpunit.xml中添加以下三行:
<phpunit ....... >
...
...
<php>
<ini name="display_errors" value="true"/>
</php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
之后再次运行测试,现在您可以看到PHPUnit失败的原因,
和...享受单位测试:)
Isa*_*aac 28
我知道orignal海报的问题已经得到解答,但是对于任何未来搜索的人来说:有一件事可能导致PHPUnit无声地失败(即它只是停止运行测试而不告诉你原因)是它有一个错误处理程序,它在每次测试运行之前设置,用于捕获错误并在测试运行结束时显示它们.问题是某些错误会停止整个测试运行的执行.
作为第一步,当我发生这种情况时,我通常会将错误处理程序重置为立即输出错误消息的内容.在我的基础测试类中,我有一个调用的方法setVerboseErrorHandler,setUp当发生这种情况时,我会在测试的顶部调用(或者调用).下面需要php 5.3或更高版本(由于关闭),所以如果你在5.2或更低,你可以使它成为常规功能.
protected function setVerboseErrorHandler()
{
$handler = function($errorNumber, $errorString, $errorFile, $errorLine) {
echo "
ERROR INFO
Message: $errorString
File: $errorFile
Line: $errorLine
";
};
set_error_handler($handler);
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*ess 22
创建最简单的测试类,无需bootstrap.php或phpunit.xml首先验证新安装是否有效.如果在运行任何测试之前无法实例化所有测试用例(每个测试方法和数据提供者一个),PHPUnit将在没有任何消息的情况下停止.
你已经知道如何让它工作,但我的解决方案有点不同.
您可以做的第一件事是检查退出状态.如果它不为0,则退出PHP,并且由于设置了INI配置设置,因此未输出任何PHP错误消息.我所做的是启用"display_errors"INI设置,并将"error_reporting"设置为E_ALL.然后,我能够识别错误,例如PHP无法解析某个脚本.一旦我修复了它,PHPUnit就可以正常运行了.
我设法用一个自定义的"致命错误处理程序"在一个角落里画出了自己的画面,在某些罕见的情况下,这些处理器没有输出任何内容.那些符合墨菲定律的条件,一旦我忘记了处理程序就实现了.
既然它不是真正的"PHP单元问题",其他答案都没有帮助[虽然@David的问题在底层是同样的事情],即使症状是相同的 - phpunit终止没有输出,没有错误,没有记录并没有任何线索.
最后,我不得不通过在引导代码中添加这个来逐步跟踪整个测试套件:
register_shutdown_function(function() {
foreach ($GLOBALS['lastStack'] as $i => $frame) {
print "{$i}. {$frame['file']} +{$frame['line']} in function {$frame['function']}\n";
}
});
register_tick_function(function() {
$GLOBALS['lastStack'] = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 8);
});
declare(ticks=1);
Run Code Online (Sandbox Code Playgroud)
如果有人设法做到比这更糟糕,并以某种方式阻止stdout,这个修改应该工作:
register_shutdown_function(function() {
$fp = fopen("/tmp/path-to-debugfile.txt", "w");
foreach ($GLOBALS['lastStack'] as $i => $frame) {
fwrite($fp, "{$i}. {$frame['file']} +{$frame['line']} in function {$frame['function']}\n");
}
fclose($fp);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25252 次 |
| 最近记录: |