【问题标题】:PHPUnit trait not found after updating composer.json更新 composer.json 后未找到 PHPUnit 特征
【发布时间】:2018-10-25 09:09:35
【问题描述】:

原作曲家.json

"autoload": {
    "psr-4": { "": "src/" },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ],
    "exclude-from-classmap": [ "/tests/" ]
},
"autoload-dev": {
    "psr-4": { "tests\\": "tests/" }
}

新的 composer.json

"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle",
        "TOTO\\": "src/TOTO"
    },
    "classmap": [
        "app/AppKernel.php",
        "app/AppCache.php" ],
    "exclude-from-classmap": [ "/tests/" ]
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    },
    "files": [
        "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php"
    ]
},

我的特征在tests\TOTO\Services\InvokeMethodTrait 中定义,并被其他测试调用,例如tests\TOTO\Services\ConversationServiceTest,因为优化自动加载器的更改我得到Fatal error: Trait 'tests\TOTO\Services\InvokeMethodTrait' not found in /var/www/symfony/tests/TOTO/Services/ConversationServiceTest.php on line 17。它之前工作正常,我没有更改相关类中的任何内容。

有什么想法吗?

【问题讨论】:

标签: symfony composer-php phpunit


【解决方案1】:

composer.json 的原始部分有:

"psr-4": { "tests\\": "tests/" }

还有新的:

"psr-4": {
    "Tests\\": "tests/"
}

tests 命名空间的大小写发生了变化。这对 PHP(本机)来说不是问题,因为命名空间和类不区分大小写(关于 PHP 区分大小写的总结很好的答案https://stackoverflow.com/a/33273959/5264262)。但是作曲家的自动加载器将未知的类名作为字符串接收,并将所有完全限定的类名解析为require 文件的某些路径,因此该过程区分大小写。在https://github.com/composer/composer/issues/2767关于这个话题的公开问题上进行了一些讨论。

最后一点是:我们在 composer.json 中的命名空间和类命名应该是区分大小写的。

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 2017-01-12
    • 1970-01-01
    • 2015-06-19
    • 2019-07-12
    • 1970-01-01
    • 2018-07-02
    • 2020-02-24
    • 2016-08-16
    相关资源
    最近更新 更多