我正在尝试将PhpUnit与Composer一起使用。为此,我做了:
1为req composer部分添加了phpunit:
"require": { "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致命错误:调用成员函数 在/home/serek/php/project/tests/bootstrap.php中的非对象上添加() 在第12行
出现问题是因为 return ComposerAutoloaderInit :: getLoader();在vendor / autoload中,将NULL返回到测试引导程序中。
任何想法如何在不破解Loader的情况下解决它?
代码: 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)
/../供应商/ autoload.php
// autoload.php generated by Composer
require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInit::getLoader();
答案 0 :(得分:11)
问题是PHPUnit已经需要自动加载文件,因此你的require_once调用没有被执行,因此没有设置返回值(php不保留require调用的返回值,因此require_once在该用例上中断)。
您可以安全地将其更改为require
,因为在最近的作曲家版本中,自动加载器不再创建两次并且需要多次才会每次都返回相同的实例。