首页 文章

使用PhpUnit时,Composer无法加载加载程序

提问于
浏览
3

我正在尝试将PhpUnit与Composer一起使用 . 为此我做了:

1添加phpunit到req composer部分:

“要求”:{
“php”:“> = 5.3.0”
},
“require-dev”:{
“phpunit / phpunit”:“3.7 . *”
},
“autoload”:{
“psr-0”:{“PhpProject”:“src /”}
}

2安装所需的东西:

php composer.phar install --dev

操作成功完成 .

安装phpunit / phpunit(3.7.6)下载:100%

不幸的是,当我想运行测试时,我得到了

./vendor/bin/phpunit PHP致命错误:在第12行的/home/serek/php/project/tests/bootstrap.php中调用非对象的成员函数add()

出现问题是因为返回ComposerAutoloaderInit :: getLoader();在vendor / autoload中,将NULL返回到测试引导程序中 .

任何想法如何在没有黑客加载器的情况下解决它?

代码:phpunnit.xml.dist

> <?xml version="1.0" encoding="UTF-8"?>
> 
> <phpunit bootstrap="tests/bootstrap.php" colors="true">
>     <testsuites>
>         <testsuite name="PhpProject Test Suite">
>             <directory>tests/PhpProject/</directory>
>         </testsuite>
>     </testsuites>
> 
>     <filter>
>         <whitelist>
>             <directory suffix=".php">src/PhpProject/</directory>
>         </whitelist>
>     </filter> </phpunit>

tests / bootstrap.php(这里我只需要自动加载器)

> $loader = require_once __DIR__ . "/../vendor/autoload.php";
> $loader->add('PhpProject\\', __DIR__); //<- this is problematic line 12 (comments has 9 lines)

/../vendor/autoload.php

// autoload.php generated by Composer
require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInit::getLoader();

1 回答

  • 11

    问题是PHPUnit已经需要自动加载文件,所以你的require_once调用没有被执行,因此没有设置返回值(php不保留require调用的返回值,因此require_once在该用例上中断) .

    您可以安全地将其更改为 require ,因为使用最近的作曲家版本,自动加载器不再创建两次并且需要多次才会每次都返回相同的实例 .

相关问题