我正在尝试启动PHPUnit测试。
我正在使用composer加载PHPUnit 4.5、Yii 1.1.14和我们构建的一些自定义Yii包。在这些自定义包中,我们使用Yii类自动加载一些设置别名的文件。
在运行应用程序时,我们手动包含基本Yii文件,然后运行composer生成的自动加载。
问题是,当我们运行PHPUnit时。。composer自动加载首先运行。即使在使用include:指定引导文件时
bin/phpunit --bootstrap carcass/phpunit.bootstrap.php
导致以下异常:
Fatal error: Class 'Yii' not found
事实上,自动加载似乎甚至在--
选项解析之前就已经运行:
bin/phpunit --help
导致相同的错误。删除自动加载允许PHPunit运行。
有办法解决这个问题吗?
我尝试在我们的主composer.json中为Yii基本文件放置一个自动加载,但子包的自动加载首先运行。。同样的错误。
我还尝试在每个子包中放置Yii基本文件的自动加载。。但当composer使用CCD_ 2时,我们会得到重新声明错误。我也不太喜欢这个选项,因为它严格地定义了Yii定义从哪里来的子包,而这些子包实际上并不需要知道。
因为自动加载classmap部分在所有文件部分(包括来自子包的文件部分)之前首先运行。
将yii和YiiBase文件放在我们项目的主composer.json的classmap中解决了这个问题:
"autoload": {
"classmap": [
"composer_packages/yiisoft/yii/framework/YiiBase.php",
"composer_packages/yiisoft/yii/framework/yii.php"
],
"files": [
...
]
}