仅当测试失败时,PHPUnit(Phar)致命错误

仅当测试失败时,PHPUnit(Phar)致命错误,php,phpunit,phpstorm,phar,Php,Phpunit,Phpstorm,Phar,我选择使用PHPUnit PHPUnit-4.8.26.Phar的Phar来单元测试我定制的PHP框架和应用程序。我之所以使用旧的稳定版本,是因为我需要与PHP5.4.29兼容 我之所以选择不使用Composer获取PHPUnit,是因为它往往会用依赖项污染我的供应商文件夹。我喜欢让它尽可能的瘦 我正在使用Windows 7 Pro SP1、WampDeveloper v5.4.0.1、ProphStorm 2016.1.2、Phing和一大堆其他很酷的东西来做我的事情 问题 我可以在PhpSt

我选择使用PHPUnit PHPUnit-4.8.26.Phar的Phar来单元测试我定制的PHP框架和应用程序。我之所以使用旧的稳定版本,是因为我需要与PHP5.4.29兼容


我之所以选择不使用Composer获取PHPUnit,是因为它往往会用依赖项污染我的供应商文件夹。我喜欢让它尽可能的瘦

我正在使用Windows 7 Pro SP1、WampDeveloper v5.4.0.1、ProphStorm 2016.1.2、Phing和一大堆其他很酷的东西来做我的事情

问题 我可以在PhpStorm中成功运行通过的单元测试。 我可以在PhpStorm中成功运行一组通过的单元测试。 我无法从PhpStorm中成功运行失败的单元测试。 我可以从命令行成功运行通过的单元测试。 我可以通过命令成功地运行一组通过的单元测试。 我无法从命令行成功运行失败的单元测试。 它不显示典型的测试失败消息,而是显示以下错误:

警告:requireComposer\Autoload\ClassLoader.php:无法打开 流:中没有这样的文件或目录 D:\WampDeveloper\Websites\qclean.development\bootstrap\Autoloader.php 第23行

致命错误:require:无法打开所需的“Composer\Autoload\ClassLoader.php” 包括_路径='。;D:\WampDeveloper\Tools\PEAR\PEAR;D:\WampDeveloper\Tools\PEAR;D:\WampDeveloper\Components\Php\PEAR;D:\WampDeveloper\Tools\PHPMailer;' 在里面 D:\WampDeveloper\Websites\qclean.development\bootstrap\Autoloader.php 第23行

以及在上面展开的屏幕截图:

支持信息 我的目录结构:

我的单元测试脚本'ConfigurationTest.php':

我的PHPUnit XML配置文件“TestAll.XML”:

最后是我的自动加载器“Autoloader.php”:

错误和警告表示无法加载Composer\Autoload\ClassLoader.php文件。我不明白的是,当我使用Phar时,为什么它会要求这个文件?从互联网上读到的片段表明Phar应该有一个内部自动加载器,尽管我看不到

我不想安装作曲家只是为了得到它的自动加载器。这将挫败试图单独使用药物的目的

我将PHPUnit Phar路径添加到我的Windows%path%,但这没有任何区别。我理解,如果PHPUnit是使用PEAR安装的,那么应该这样做


非常感谢您在这个“脱发问题”上的任何帮助…

您需要做的一切,进入设置>语言与框架>PHP>PHPUnit并选择PHPUnit库-并设置PHPUnit.phar的路径,仅此而已


您需要做的就是进入设置>语言与框架>PHP>PHPUnit并选择PHPUnit库,然后设置PHPUnit.phar的路径,仅此而已


如果查看堆栈跟踪,您将看到错误是在上触发的。默认情况下,此函数调用。这意味着您注册的自动加载器将被调用。在这种情况下,将为项目外部的类调用它

因此,在需要文件之前,您应该向自动加载器添加额外的检查。你需要一个不存在的文件

if (file_exists($fileName)) {
    require $fileName;
}
或者只是抑制错误,要求不引发异常,因此使用@:


如果查看堆栈跟踪,您将看到错误是在上触发的。默认情况下,此函数调用。这意味着您注册的自动加载器将被调用。在这种情况下,将为项目外部的类调用它

因此,在需要文件之前,您应该向自动加载器添加额外的检查。你需要一个不存在的文件

if (file_exists($fileName)) {
    require $fileName;
}
或者只是抑制错误,要求不引发异常,因此使用@:


始终发布代码,而不是它的图像。我选择不使用Composer获取PHPUnit的原因是,它往往会用依赖项污染我的供应商文件夹。我喜欢让它尽可能的瘦。这就是为什么composer允许要求某些依赖项作为开发项。在生产环境中部署时,您执行composer安装-无开发项,因此只安装生产代码所需的依赖项。@Christian Giupponi。是的,你说得对。我的foobar。总是发布代码,而不是它的图像。我选择不使用Composer获取PHPUnit的原因是,它往往会用依赖项污染我的供应商文件夹。我喜欢让它尽可能的瘦。这就是为什么composer允许要求某些依赖项作为开发项。在生产环境中部署时,您执行composer安装-无开发项,因此只安装生产代码所需的依赖项。@Christian Giupponi。是的,你说得对。我的foobar。不幸的是,这样的修改会在我的框架中导致错误。那么,您的文件在指定的位置不存在,并且依赖于include\u路径?我认为这是一种糟糕的做法。不管怎样,你也可以
尝试包含文件并在出现错误时抑制错误。不幸的是,这样的修改会在“我的框架”中导致错误。因此,您的文件不存在于指定的位置,并且依赖于包含路径?我认为这是一种糟糕的做法。无论如何,您也可以尝试包含文件并在出现错误时抑制错误。这就是我要让它工作的有效方法。在phpstormsettings>Languages&Framesworks>PHP>PHPUnit>testrunner中,我删除了对默认配置和引导文件的任何引用。当单个测试文件直接从PHPStorm运行时,它就开始工作了。在此之后,我添加了一些真实的测试。这样做要求我在测试文件的顶部有一个“include”路径,这样我的测试代码就会出现。这是我希望通过使用自己的自动加载器来避免的事情。我想还需要更多的实验。你基本上只是把你的自动加载器移到了真正的问题所在。所以这只是一个解决办法。这就是我必须要做的,让它工作。在phpstormsettings>Languages&Framesworks>PHP>PHPUnit>testrunner中,我删除了对默认配置和引导文件的任何引用。当单个测试文件直接从PHPStorm运行时,它就开始工作了。在此之后,我添加了一些真实的测试。这样做要求我在测试文件的顶部有一个“include”路径,这样我的测试代码就会出现。这是我希望通过使用自己的自动加载器来避免的事情。我想还需要更多的实验。你基本上只是把你的自动加载器移到了真正的问题所在。所以这只是一个解决办法。