【问题标题】:Composer PSR-4 PHPUnit class not found in same directory在同一目录中找不到 Composer PSR-4 PHPUnit 类
【发布时间】:2016-11-08 00:28:36
【问题描述】:

我有以下项目结构

src/
   ├─ MyPackage/
               ├─ MySDK.php
               └─ SDKHelper.php
test/
    ├─ MySDKTest.php
    └─ TestUtils.php
composer.json
composer.lock

我的 composer.json 文件如下所示:

"autoload": {
    "psr-4": {
        "MyPackage\\": "src/MyPackage"
    }
}

一切都很好,MySDKTest.php 单元测试通过了,直到我尝试将一些实用方法添加到第三个文件TestUtils.php。当我尝试从MySDKTest.php 调用TestUtils::utilityMethod() 时,phpunit 抱怨找不到类TestUtils

我一直在阅读有关添加 autoload-dev 密钥的信息,我尝试过各种变体,但到目前为止,似乎没有任何效果。我应该澄清一下,我可以在MySDKTest 中使用MySDKSDKHelper 方法。 MySDKTest.php 工作时看起来像这样:

use MyPackage\MySDK;

class MySDKTest extends PHPUnit_Framework_TestCase {

    public function testPackage() {
        $sdk = new MySDK();
        $sdk->exampleMethod();
    }
}

【问题讨论】:

  • 对于一个好问题,你应该总是提到你到底尝试了什么,但没有奏效。这将使您更容易发现错误。不要写我一直在阅读有关添加 autoload-dev 密钥的文章,我尝试过的变体,至少显示一个您认为应该完成这项工作的示例。还要显示无法加载的代码,而不是已经工作的代码,即我们需要TestUtils.php 内容,而不是MySDKTest.php
  • 嘿@Sven,我忘了这个问题。事实证明,我实际上做的一切都是正确的。再次运行 composer.phar install 会生成更新的 autoload.php,从而解决了问题。我将添加我使用过的autoload-dev 配置。

标签: php phpunit composer-php autoload psr-4


【解决方案1】:

应该很简单。 Composer 的 PSR-4 自动加载器只是定义了从命名空间到文件夹的映射。

您的测试命名空间是否正确?看起来他们不是,因为您在测试类的顶部有一个 use。如果MySDK 位于命名空间MyPackage(完全限定MyPackage\MySDK)中,我希望MySDKTest 也位于MyPackage 命名空间MyPackage\MySDKTest 中。不一定要那样 - 如果您愿意,可以将测试放在不同的命名空间中。

无论如何,它不工作的原因是你没有向自动加载器注册测试文件夹。看起来你的东西已经设置好了,你的自动加载器配置应该是这样的:

{
    "autoload": {
        "psr-4": { "MyPackage\\": ["src/MyPackage/", "test/"] }
    }
}

您还需要在测试类中将 use MyPackage\MySDK; 更改为 namespace MyPackage;


注意

您的文件夹结构有点奇怪。我希望test 匹配src。所以它会是这样的:

test/
    ├─ MyPackage/
        ├─ MySDK.php
        └─ SDKHelper.php

相应地调整命名空间:

{
    "autoload": {
        "psr-4": { "MyPackage\\": ["src/MyPackage", "test/MyPackage"] }
    }
}

【讨论】:

  • 将测试代码与生产代码分开是autoload-dev的工作,因此无需将包含test的路径混入autoload
猜你喜欢
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2015-12-16
  • 2019-04-20
  • 2018-06-01
  • 2017-01-02
  • 2017-02-01
相关资源
最近更新 更多