【问题标题】:Using phpunit how to make composer autoloader check global as well as local vendor directory for classes?使用 phpunit 如何让 composer autoloader 检查全局以及本地供应商目录的类?
【发布时间】:2017-03-05 23:14:40
【问题描述】:

所以我使用 composer 全局安装了 phpunit。但是我想在一个也使用composer的项目中使用它,但是没有安装phpunit(这样做的原因很无聊)。

所以我运行下面的第一个测试并得到错误。

Fatal error: Class 'PHPUnit\Framework\TestCase' not found in /vagrant/sites/core/trunk/Notify/php/tests/MyFirstTest.php on line 5

我认为加载全局作曲家自动加载器会让 phpunit 在全局作曲家目录中查找 phpunit 类,但它似乎无法找到它。我猜它将 $vendorDir (如下)设置为本地作曲家目录而不是全局目录。有没有办法让它同时检查?

这是来自 /home/vagrant/.composer/vendor/composer/autoload_classmap.php 的行,显示该类位于全局自动加载类映射中。

'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php',

这是我用来启动进程的命令行。

phpunit --bootstrap tests/bootstrap.php tests/MyFirstTest.php

这里是 MyFirstTest.php

<?php

use PHPUnit\Framework\TestCase;

class MyFirstTest extends TestCase {
    public function testOneIsOne() {
        $this->assertEquals(1, 1); 
    }   
}

这是我加载全局 phpunit 自动加载器的 bootstrap.php。

<?php

require_once('/home/vagrant/.composer/vendor/autoload.php');

写出这个问题有助于澄清我的想法。如果有人有一个很好的解决方案,那就太好了。我开始认为我应该在本地安装 phpunit。

为任何建议干杯。

【问题讨论】:

  • 我想不出任何不将 phpunit 添加到 composer.lock 文件的 require-dev 部分的充分理由。只需为您的项目安装它。

标签: php phpunit composer-php autoloader


【解决方案1】:

问题是我使用的是 PhpUnit 4.8,因为我正在处理的项目使用 php 5.5.9,而当前版本的 PhpUnit 5.0 及更高版本需要 php 5.6.0。

phpunit.de/getting-started.html 上的教程适用于 PhpUnit 5.0 及更高版本。看起来 PhpUnit 5.0 为框架引入了命名空间。在此之前,我尝试加载的 PHPUnit\Framework\TestCase 类是 PHPUnit_Framework_TestCase。

您实际上可以在类映射文件的行中看到:

'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php',

但我认为类名称中的下划线只是作曲家的类映射用于表示命名空间的一些名称争论。

当我更改 MyFirstTest.php 以查找正确的类 PhpUnit_Framework_TestCase 并删除 use 语句后,一切正常。无需在本地安装 PhpUnit。它在全局作曲家供应商目录中找到了合适的类。

<?php

class MyFirstTest extends PhpUnit_Framework_TestCase {
    public function testOneIsOne() {
        $this->assertEquals(1, 1); 
    }   
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-10
    • 2023-04-04
    • 2014-02-15
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多