使用phpunit如何使作曲家自动加载器检查全局以及类的本地供应商目录?

时间:2016-10-24 08:36:52

标签: php phpunit composer-php autoloader

所以我使用composer全局安装了phpunit。但是我想在一个也使用作曲家的项目中使用它,但是没有安装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); 
    }   
}

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

<?php

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

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

欢呼任何建议。

1 个答案:

答案 0 :(得分:0)

问题是我使用的是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。

您实际上可以在classmap文件的行中看到:

'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); 
    }   
}