通过 Composer 安装的 PHPUnit 使用错误的自动加载

标签 php phpunit composer-php

我有一个正常的目录结构:

 - root
  - vendor
      - bin/phpunit
  - tests
     - bootstrap.php

我的composer.json:

{
    "name": "test/testing",
    "minimum-stability": "dev",
    "require": {
        "phpunit/phpunit": "4.1.*@dev",
        "phpunit/phpunit-mock-objects": "2.2.*@dev"
    },
    "autoload": {
        "classmap": ["tests/config.inc","test.inc"]
    }
}

我的 bootstrap.php:

<?php

require_once 'vendor/autoload.php';

Bootstrap 中还有其他一些东西,这就是我需要它的原因, 但我在这里将其删除,因为它与我的问题无关。

当我尝试在根文件夹运行 PHPUnit 时:

vendor/bin/phpunit --bootstrap tests/bootstrap.php tests/ItemsTest.php

我收到错误:

PHP Warning:  require(xxxx/vendor/phpunit/phpunit-mock-objects/tests/../vendor/autoload.php): failed to open stream: No such file or directory in xxxxxxx/vendor/phpunit/phpunit-mock-objects/tests/bootstrap.php on line 4

我不知道为什么 phpunit/自动加载器正在加载这个 Bootstrap :

phpunit-mock-objects/tests/bootstrap.php

当然还有第 4 行:

require __DIR__ . '/../vendor/autoload.php';

不起作用。

最佳答案

无论出于何种原因,PhpUnit 都不会将引导路径理解为相对路径。

按如下方式替换引导路径似乎可以解决问题:

vendor/bin/phpunit --bootstrap ./tests/bootstrap.php tests/ItemsTest.php

关于通过 Composer 安装的 PHPUnit 使用错误的自动加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24059602/

相关文章:

PHPUnit:如何模拟对同一方法的多次调用

php - Composer - 不使用自动加载和加载单个类?

php - 按特定值对数组进行排序

php - 如何增加每个页面加载的计数器(在 PHP 中)?

phpunit - phpunit 中的可重用测试

php - Symfony + Doctrine 功能数据库测试

linux - 服务器 composer install --no-dev killed

laravel - Composer 安装失败 - jimmyjs/laravel-report-generator

PHP 日期格式、删除时间等

php - 在文本中查找电子邮件的正则表达式