当前位置: 首页 > 知识库问答 >
问题:

作曲家phpUnit psr-4自动加载类未找到

姚洲
2023-03-14

我正在使用一些phpunit测试类尝试composer autoload,但我似乎无法让它工作。当我从命令行运行phpunit时,我得到以下错误:“PHP致命错误:Class…notfound”。

我将提供所有的结构和文件信息。我可以,所以希望有人能发现我的错误。

结构(精简为相关文件):

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>

测试/功能/基本测试用例。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
{
  ...

测试/功能/主页测试。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

然后,我尝试运行phpunit并得到一个类未找到错误:

$ 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$ 

我还检查了供应商/composer/autoload_psr4。php来确保测试引用被设置,并且它是。

...
Tests\\' => array($baseDir . '/tests'),
...

我疯狂地在谷歌上搜索,但不知道哪里出错了。

共有2个答案

潘泰
2023-03-14

我有一个类似的问题,但没有语法问题。当我添加了第二个ClassTest(ModelTwoTest.php)之后,Fixtures。php类已自动加载。如果删除1个modelTest,则仅自动加载剩余的modelTest,而不使用固定装置。奇怪的行为。

src/
tests/
      Models/
             ModelOneTest.php
             ModelTwoTest.php <---
      Fixtures/
             Fixtures.php
孟光耀
2023-03-14

命名空间目录区分大小写。您必须将文件夹重命名为功能

如PSR-4文件所述:

子目录名称必须与子命名空间名称的大小写匹配。

 类似资料:
  • 不知何故,我无法让自动加载正常工作。我正在为phpunit使用以下引导文件。 这个的输出显示,据我所知,注册应该是正常的。 不知怎的,我犯了以下错误。 在myproj文件夹src/test/unit/-DefaultDomainEventTest中,我的文件夹结构如下所示。php-bootstrap。php示例/-NotificationCountChangedEvent。php Notifica

  • 我按照作曲家的说明,成功安装了作曲家。我想使用Tumblr全新的php api客户端。 我的文件夹结构: : : 使用也非常有效。但是当执行找不到该类。 致命错误:类'Tumblr\API\Client'未在第9行的[...]/htdocs/Tumblr/myfile.php中找到

  • 我开始学习Composer,并正在开发一个系统,在该系统中,我将文件与核心应用程序文件分开,如下所示: 所以,要在composer中设置此设置。json文件并访问所有类/App much/Core会这样吗? 还是有更正确的方法? 我也读过PSR-0和PSR-4的比较,我仍然有点怀疑应该使用哪一种。在我的情况下,我应该实现什么,PSR-0还是PSR-4?

  • 其实我是新的PHP。我在一个几乎是空的文件夹中运行这个(实际上是按照劳拉-cast教程:用TDD设计一个流畅的应用编程接口)。 我的目录结构看起来像 src 表情。php 表达测试。php 内部作曲家。json: 内部表达测试。php: 内心的表达。php 然后我运行composer dump autoload并运行phpunit,但仍然得到: 我的语法有问题吗?我对作曲家的理解是非常基本的。提前

  • 我很难理解这个简单的界面有什么问题。 当我收到下面的通知 弃用通知:./App/Interfaces/renderData.php中的类App\Interfaces\renderData不符合psr-4自动加载标准。它将不再在Composer v2.0中自动加载。 composer.json自动加载部分: 文件夹结构为: 我已经尝试将应用重命名为应用,然后转储自动加载,但问题仍然存在。

  • 文件自动加载_psr4。php不包含“autoloaddev”部分的名称空间,仅包含“autoload”部分的名称空间。 当我的作曲家。json读取 然后我跑了 My/vendor/composer/autoload_prs4。php文件显示为 谢谢