PHPUnit-不执行任何操作、无错误、无输出
抱歉,还有一个“phpunit不起作用”的问题。它过去工作了好几年了。今天我重新安装了PEAR和phpunit,原因与此问题无关。现在,当我像往常一样运行phpunit时。什么也没发生。cli只是给我显示了一个新行,没有任何输出 有没有人遇到过这个问题,或者知道是什么导致了这个问题PHPUnit-不执行任何操作、无错误、无输出,phpunit,Phpunit,抱歉,还有一个“phpunit不起作用”的问题。它过去工作了好几年了。今天我重新安装了PEAR和phpunit,原因与此问题无关。现在,当我像往常一样运行phpunit时。什么也没发生。cli只是给我显示了一个新行,没有任何输出 有没有人遇到过这个问题,或者知道是什么导致了这个问题 PHPUnit Version: 3.5.15 PEAR Version: 1.9.4 PHP Version: 5.3.8 Windows 7 检查您正在运行的phpunit与您安装的phpunit是否相同
PHPUnit Version: 3.5.15
PEAR Version: 1.9.4
PHP Version: 5.3.8
Windows 7
检查您正在运行的phpunit与您安装的phpunit是否相同:
$ pear list phpunit/phpunit
...
script /path/to/phpunit
...
尝试使用完整路径精确执行phpunit
然后检查PATH变量,看看其中是否有正确的目录。如果没有,请解决这个问题
如果这没有帮助,请使用将某些内容写入phpunit可执行文件,例如“echo 123;”并运行phpunit。检查您是否看到了这一点。创建最简单的测试类,您可以不使用
bootstrap.php
或phpunit.xml
来首先验证新安装是否有效。如果PHPUnit无法在运行任何测试之前实例化所有测试用例(每个测试方法和数据提供程序一个),它将停止运行,而不会显示任何消息。您已经了解了如何让它工作,但我的解决方案有点不同
您可以做的第一件事是检查退出状态。如果不是0,则PHP退出,并且由于INI配置设置的原因,不会输出任何PHP错误消息。我所做的是启用“显示错误”INI设置,并将“错误报告”设置为
E\u ALL
。然后,我能够识别错误,比如PHP无法解析某个脚本。一旦我解决了这个问题,PHPUnit就可以正常运行了。我使用的是OSX和MAMP。为了获得错误消息,我必须在php.ini
中调整以下条目:
display_errors = On
display_startup_errors = On
请不要让它进入
/Applications/MAMP/bin/php/php5.3.6/conf/php.ini
检查您的代码中是否没有写入任何逻辑,这些逻辑刚刚消失,没有输出。比如说,
<?php
if (!array_key_exists('SERVER_NAME', $_SERVER)) {
die();
}
我知道原始海报上的问题已经得到了回答,但对于将来搜索的任何人来说都是如此:有一件事会导致PHPUnit无声地失败(即它只是停止运行测试而不告诉您原因),那就是它在每次测试运行之前都设置了一个错误处理程序,用于捕获错误并在测试运行结束时显示它们。问题是某些错误会停止整个测试运行的执行
当发生这种情况时,作为第一步,我通常会将错误处理程序重置为立即输出错误消息的内容。在我的基本测试类中,我有一个名为setVerboseErrorHandler
的方法,发生这种情况时,我将在测试顶部(或setUp
中)调用该方法。下面的代码需要PHP5.3或更高版本(由于闭包),因此如果您使用的是5.2或更低版本,则可以将其作为常规函数
受保护函数setVerboseErrorHandler()
{
$handler=函数($errorNumber、$errorString、$errorFile、$errorLine){
回声“
错误信息
消息:$errorString
文件:$errorFile
行:$errorLine
";
};
设置错误处理程序($handler);
}
如果从命令行运行phpunit的最新版本时
> php phpunit
or
> ./phpunit
or
> php ./phpunit.phar
or
> ./phpunit.phar
您立即返回到提示符,没有任何消息,这可能是由于“suhosin secutiry”设置造成的。
phpunit现在是一个包含所有库的“phar”包。要在php启用了suhosin安全模块时运行这样的文件,必须首先设置
suhosin.executor.include.whitelist = phar
在php.ini文件中(例如,使用debian/ubuntu,您可能需要编辑文件/etc/php5/conf.d/suhosin.ini我用一个自定义的“致命错误处理程序”成功地将自己画在角落里在某些罕见的情况下,结果是什么也没有输出。根据墨菲定律,这些条件一旦我忘记了处理程序已经就位,就会变成现实
因为这不是一个真正的“PHPunit问题”,其他答案都没有帮助(尽管@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);
如果有人做得比这更糟,并且以某种方式阻止了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);
});
这是一条旧线,但我遇到同样的问题时偶然发现了它
我也有同样的问题,没有任何东西返回控制台,包括打印、打印、回音等
通过使用--stderr
作为选项解决了这个问题。对于那些面临PHPUnit任何问题,并且PHPUnit正在默默失败的人,只需在PHPUnit.xml中添加以下三行:
<phpunit ....... >
...
...
<php>
<ini name="display_errors" value="true"/>
</php>
</phpunit>
...
...
之后再次运行测试,现在您可以了解PHPUnit失败的原因
还有…享受单元测试:)我在这里尝试了所有东西,但在尝试phpunit之前,一切都不起作用——没有配置simpletest.php
。这最终给了我一些输出,这意味着我的phpunit.xml.dist
文件已损坏。(调试完后,我会回来更新它。)
下面是simpletest.php
的内容,但是任何测试文件都应该可以工作
<?php
use PHPUnit\Framework\TestCase;
final class FooTest extends TestCase
{
public function testFoo()
{
$this->assertEquals('x', 'y');
}
}
对我来说,冲突是与Xdebug的指令冲突
xdebug.remote_enable=1
我面临着一个问题。我可以从根目录运行phpunit,但不能从其他任何地方运行。因此,我放置“-configuration”标记,并将其指向我的xml配置
$./phpunit--configuration/phpunit.xml
phpunit的路径是可选的,我之所以使用它,是因为我是由composer在本地安装的。创建最简单的测试类,而无需使用bootstrap.php
或phpunit.xml
来首先验证新安装是否有效。如果PHPUnit不能实例化所有测试用例,那么它将停止运行,而不显示任何消息。每个测试方法和数据提供程序一个测试用例。@DavidHarkness谢谢