OS High Sierra环境下MAMP中PHPUnit运行测试遇致命错误
解决MAMP + Zend Framework 1 + PHP7.2下PHPUnit的加载错误问题
我之前在ZF1 + PHP7.2的MAMP环境里踩过几乎一模一样的坑,结合自己的排查经验,给你几个能快速解决的方向:
1. 先确保PHPUnit版本适配且安装正确
ZF1属于比较老的框架,和高版本PHPUnit兼容性很差——PHP7.2对应的PHPUnit最高选6.5.x版本(7.x及以上会彻底抛弃旧的命名空间结构)。最稳妥的安装方式是用Composer:
- 进入你的ZF1项目根目录,执行命令:
composer require --dev phpunit/phpunit=^6.5 - 安装完成后,先验证是否能正常调用:
如果能输出版本号,说明安装没问题;如果报错,先执行vendor/bin/phpunit --versioncomposer remove --dev phpunit/phpunit再重新安装。
2. 强制使用MAMP的PHP环境执行PHPUnit
MAMP自带的PHP和系统默认PHP是两个独立环境,很多时候你执行phpunit用的是系统PHP,而PHPUnit装在了MAMP的PHP环境里,导致找不到文件。解决方法:
- 先找到MAMP中PHP7.2的完整路径,比如:
(路径里的版本号根据你MAMP安装的PHP7.2具体版本调整)/Applications/MAMP/bin/php/php7.2.34/bin/php - 用这个完整路径执行PHPUnit:
/Applications/MAMP/bin/php/php7.2.34/bin/php vendor/bin/phpunit - 嫌麻烦的话,可以把MAMP的PHP路径加到系统环境变量里,这样直接敲
phpunit就会用MAMP的PHP。
3. 修正测试文件的自动加载逻辑
ZF1的旧测试代码可能还在使用过时的require_once 'PHPUnit/Framework/TestCase.php';,但PHPUnit 6+已经改用命名空间+Composer自动加载了,你需要修改测试文件的开头:
// 替换原来的require_once语句,路径根据你的项目结构调整(比如测试文件在tests目录,vendor在根目录) require_once __DIR__ . '/../vendor/autoload.php'; // 引入命名空间下的TestCase use PHPUnit\Framework\TestCase; // 测试类继承新的TestCase class YourTest extends TestCase { // 你的测试方法 }
别再用PHPUnit_Framework_TestCase这个旧类名了,PHPUnit 6+已经废弃它了。
4. 排查include_path(备选方案,不推荐)
如果实在不想用Composer自动加载,你可以把PHPUnit的src目录加到PHP的include_path里:
- 找到MAMP对应的php.ini文件(MAMP -> Preferences -> PHP -> 点击php.ini的路径)
- 在文件里找到
include_path配置,把PHPUnit的src路径加进去,比如:include_path = ".:/usr/local/lib/php:/path/to/your/project/vendor/phpunit/phpunit/src" - 重启MAMP后再尝试运行测试。不过这种方式容易因为路径变动出问题,还是优先用Composer的方案。
内容的提问来源于stack exchange,提问作者S. Edward
相关产品推荐
相关产品推荐

