【问题标题】:phpunit Classes are not loaded in testsphpunit 类未在测试中加载
【发布时间】:2023-03-29 06:59:02
【问题描述】:

我尝试创建自己的库,它有自己的命名空间,因此可以包含在其他项目中。

我已经这样做了,composer install 运行没有错误,但是当我尝试在我的库中运行单元测试时,它没有找到任何用于模拟或直接初始化的类。

我的文件夹结构是这样的:

ProjectFolder
|
\_src
|    \_Sap
|         \_Classes
|
\_tests     
|     \_Sap
|         \_TestClasses  
|     bootstrap.php
\_vendor

类中使用的命名空间遵循以下模式:

namespace PuC\Sap;

测试中使用的模式是这样的:

namespace PuC\Sap\Tests\Sap;

我的 composer.json 看起来像这样:

"autoload": {
    "psr-4": {
        "PuC\\Sap\\": "src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "PuC\\Sap\\Tests\\": "tests/"
    }
},

在我的测试文件夹中,我添加了一个 bootstrap.php 并在我的 phpunit.xml 文件中引用它:

<?php

$loader = @include __DIR__ . '/../vendor/autoload.php')
$loader->add('Sap', __DIR__);

没有,当我在 bash 中运行时,我得到:

$ bin/phpunit tests/
PHPUnit 8.4.3 by Sebastian Bergmann and contributors.
......

7) PuC\Sap\Tests\Sap\HouseSoapServiceTest::testGetHouseData
Cannot stub or mock class or interface "PuC\Sap\Client\SapSoapClient" which does not exist

当我尝试直接初始化类时同样的问题。

我的路径错了吗?我的命名空间?

【问题讨论】:

  • src/Client/SapSoapClient.php 存在吗?否则,您的 PSR-4 自动加载器规则可能不正确
  • 放在src/Sap/Client/SapSoapClient.php下你觉得“src”下的子文件夹“Sap”有问题吗?

标签: namespaces phpunit php-7 autoload


【解决方案1】:

问题是我的 src 文件夹中的附加文件夹。使用这种修改后的结构,测试通过并找到类:

ProjectFolder
|
\_src
|    \_Classes
|
\_tests     
|     \_Sap
|         \_TestClasses  
|     bootstrap.php
\_vendor

感谢 Robbie Averill 为我指明了正确的方向。

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 1970-01-01
    • 2016-10-17
    • 2020-03-05
    • 2012-02-13
    • 2015-08-05
    • 2016-08-10
    • 1970-01-01
    • 2018-05-05
    相关资源
    最近更新 更多