composer phpunit psr-4 autoload class 未找到
composer phpunit psr-4 autoload class not found
我正在通过一些 php 单元测试 class 尝试使用 composer autoload,但我似乎无法让它工作。当我从命令行 运行 phpunit 时,出现以下错误:"PHP Fatal Error: Class ... not found".
我会给出所有的结构和文件信息。
我可以,所以希望有人能发现我哪里做错了。
结构(缩减为相关文件):
composer.json
composer.lock
phpunit.xml
vendor/
tests/
functional/
BaseTestCase.php
HomepageTest.php
composer.json
{
"require": {
"php": ">=5.5.0",
"slim/slim": "^3.1",
"slim/php-view": "^2.0",
"monolog/monolog": "^1.17"
},
"require-dev": {
"phpunit/phpunit": ">=4.8 < 6.0"
},
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
}
}
phpunit.xml
<?xml version="1.0" encoding="utf-8" ?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Initial tests">
<directory>tests/</directory>
</testsuite>
</testsuites>
</phpunit>
test/functional/BaseTestCase.php
<?php
namespace Tests\Functional;
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
use Slim\Http\Environment;
class BaseTestCase extends \PHPUnit_Framework_TestCase
{
...
test/functional/HomepageTest.php
<?php
namespace Tests\Functional;
class HomepageTest extends BaseTestCase
{
...
然后我运行更新以刷新自动加载文件
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
然后我尝试 运行ning phpunit 并得到一个 class 未找到错误:
$ vendor/bin/phpunit
PHP Fatal error: Class 'Tests\Functional\BaseTestCase' not found in <project-root>/tests/functional/HomepageTest.php on line 6
为了彻底起见,我尝试用另一种方式刷新自动加载文件,以防万一:
$ composer dump-autoload
Generating autoload files
sfbagency@sfb1:~/clients/ctest/dev$
我还检查了 vendor/composer/autoload_psr4。php 以确保正在设置测试参考,并且它是。
...
Tests\' => array($baseDir . '/tests'),
...
我疯狂地用谷歌搜索,但不知道哪里出错了。
命名空间目录区分大小写。您必须将文件夹重命名为 Functional
如PSR-4 documentation中所述:
The subdirectory name MUST match the case of the sub-namespace names.
我遇到了类似的问题,但没有语法问题。
一旦我添加了第二个 ClassTest(下面的 ModelTwoTest.php
),Fixtures.php
class 就会自动加载。如果我删除 1 个 modelTest,则只有剩余的 ModelTest 会在没有 Fixtures 的情况下自动加载。奇怪的行为。
src/
tests/
Models/
ModelOneTest.php
ModelTwoTest.php <---
Fixtures/
Fixtures.php
我正在通过一些 php 单元测试 class 尝试使用 composer autoload,但我似乎无法让它工作。当我从命令行 运行 phpunit 时,出现以下错误:"PHP Fatal Error: Class ... not found".
我会给出所有的结构和文件信息。 我可以,所以希望有人能发现我哪里做错了。
结构(缩减为相关文件):
composer.json
composer.lock
phpunit.xml
vendor/
tests/
functional/
BaseTestCase.php
HomepageTest.php
composer.json
{
"require": {
"php": ">=5.5.0",
"slim/slim": "^3.1",
"slim/php-view": "^2.0",
"monolog/monolog": "^1.17"
},
"require-dev": {
"phpunit/phpunit": ">=4.8 < 6.0"
},
"autoload-dev": {
"psr-4": {
"Tests\": "tests/"
}
}
}
phpunit.xml
<?xml version="1.0" encoding="utf-8" ?>
<phpunit colors="true" bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Initial tests">
<directory>tests/</directory>
</testsuite>
</testsuites>
</phpunit>
test/functional/BaseTestCase.php
<?php
namespace Tests\Functional;
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
use Slim\Http\Environment;
class BaseTestCase extends \PHPUnit_Framework_TestCase
{
...
test/functional/HomepageTest.php
<?php
namespace Tests\Functional;
class HomepageTest extends BaseTestCase
{
...
然后我运行更新以刷新自动加载文件
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
然后我尝试 运行ning phpunit 并得到一个 class 未找到错误:
$ vendor/bin/phpunit
PHP Fatal error: Class 'Tests\Functional\BaseTestCase' not found in <project-root>/tests/functional/HomepageTest.php on line 6
为了彻底起见,我尝试用另一种方式刷新自动加载文件,以防万一:
$ composer dump-autoload
Generating autoload files
sfbagency@sfb1:~/clients/ctest/dev$
我还检查了 vendor/composer/autoload_psr4。php 以确保正在设置测试参考,并且它是。
...
Tests\' => array($baseDir . '/tests'),
...
我疯狂地用谷歌搜索,但不知道哪里出错了。
命名空间目录区分大小写。您必须将文件夹重命名为 Functional
如PSR-4 documentation中所述:
The subdirectory name MUST match the case of the sub-namespace names.
我遇到了类似的问题,但没有语法问题。
一旦我添加了第二个 ClassTest(下面的 ModelTwoTest.php
),Fixtures.php
class 就会自动加载。如果我删除 1 个 modelTest,则只有剩余的 ModelTest 会在没有 Fixtures 的情况下自动加载。奇怪的行为。
src/
tests/
Models/
ModelOneTest.php
ModelTwoTest.php <---
Fixtures/
Fixtures.php