PHPUnit-不执行任何操作、无错误、无输出

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不起作用”的问题。它过去工作了好几年了。今天我重新安装了PEAR和phpunit,原因与此问题无关。现在,当我像往常一样运行phpunit时。什么也没发生。cli只是给我显示了一个新行,没有任何输出

有没有人遇到过这个问题,或者知道是什么导致了这个问题

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谢谢