我选择使用Phar
PHPUnit
(phpunit-4.8.26.phar)对我自定义构建的PHP框架和应用程序进行单元测试。我使用旧稳定版本的原因是因为我需要与PHP 5.4.29
兼容。
我选择不使用Composer
来获取PHPUnit的原因是因为它往往会污染我的vendors
文件夹中的依赖项。我希望尽可能保持精益。
我正在使用Windows 7 Pro SP1
,WampDeveloper v5.4.0.1
,ProPhpStorm 2016.1.2
,Phing
以及一大堆其他很酷的东西来做我的事。
而不是PHPUnit
显示典型的测试失败消息,而是退出时出现以下错误:
警告:require(Composer \ Autoload \ ClassLoader.php):无法打开 stream:没有这样的文件或目录 d:\ WampDeveloper \网站\ qclean.development \引导\ Autoloader.php 在第23行
致命错误:require():无法打开所需的' Composer \ Autoload \ ClassLoader.php' (包含路径=' d:\ WampDeveloper \工具\ PEAR \梨; d:\ WampDeveloper \工具\ PEAR; d:\ WampDeveloper \组件\腓\ PEAR; d:\ WampDeveloper \工具\ PHPMailer的;& #39) 在 d:\ WampDeveloper \网站\ qclean.development \引导\ Autoloader.php 在第23行
屏幕截图以扩展上述内容:
我的目录结构:
我的单元测试脚本(' ConfigurationTest.php'):
我的PHPUnit XML配置文件(' TestAll.xml'):
最后我的Autoloader(' Autoloader.php'):
错误和警告表示无法加载Composer\Autoload\ClassLoader.php
文件。在我使用Phar
时,我不明白为什么要求提供此文件?从互联网上读取片段表明Phar应该有一个内部自动加载器,虽然我无法看到它。
我不想安装Composer
只是为了获得它的自动加载器。这会破坏试图单独使用Phar的目的。
我将PHPUnit Phar
路径添加到了我的Windows %path%
,但这没有任何区别。我知道如果使用PEAR
安装PHPUnit,则应该这样做。
任何关于这个'头发拉出问题的帮助'非常感谢...
答案 0 :(得分:2)
如果查看堆栈跟踪,您会看到错误是在class_exists
上触发的。此函数默认调用__autoload
。这意味着您将注册您注册的自动加载器。在这种情况下,将调用一个存在于项目之外的类。
因此,您需要在需要该文件之前向自动装带器添加额外的file_exists
支票。你需要一个不存在的文件。
if (file_exists($fileName)) {
require $fileName;
}
或者只是抑制错误(require
不会抛出异常,所以请使用@
):
@require $fileName;
答案 1 :(得分:1)