PHPUnit 自动加载器错误:找不到“Yii”类

Luk*_*off 2 phpunit yii composer-php yii1.x

我正在尝试开始 PHPUnit 测试。

我正在使用 composer 加载 PHPUnit 4.5 、Yii 1.1.14 和我们构建的一些自定义 Yii 包。在这些自定义包中,我们使用 Yii 类自动加载一些设置一些别名的文件。

在运行我们的应用程序时,我们手动包含基础 Yii 文件,然后运行 ​​Composer 生成的自动加载。

问题是,当我们运行 PHPUnit 时,composer 自动加载首先运行。即使在使用 include 指定引导程序文件时:

bin/phpunit --bootstrap carcass/phpunit.bootstrap.php  
Run Code Online (Sandbox Code Playgroud)

导致以下异常:

Fatal error: Class 'Yii' not found 
Run Code Online (Sandbox Code Playgroud)

事实上,即使在--解析选项之前,自动加载似乎也已运行:

bin/phpunit --help 
Run Code Online (Sandbox Code Playgroud)

导致同样的错误。删除自动加载允许 PHPunit 运行。

有没有办法解决?

我尝试在我们的主 composer.json 中为 Yii 基础文件放置一个自动加载,但是子包的自动加载首先运行......同样的错误。

我还尝试在每个子包中为 Yii 基本文件放置一个自动加载..但是当作曲家使用require. 我也不是这个选项的忠实拥护者,因为它严格地定义了 Yii 定义来自于不需要知道的子包的地方。

Luk*_*off 5

由于自动加载类映射部分在所有文件部分(包括来自子包的文件)之前首先运行。

将 yii 和 YiiBase 文件放在我们项目的主 composer.json 的类映射中解决了这个问题:

"autoload": {  
    "classmap": [  
        "composer_packages/yiisoft/yii/framework/YiiBase.php",  
        "composer_packages/yiisoft/yii/framework/yii.php" 
    ], 
    "files": [ 
        ... 
    ] 
}
Run Code Online (Sandbox Code Playgroud)