首页 > 解决方案 > 更新 composer.json 后未找到 PHPUnit 特征

问题描述

原作曲家.json

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

新作曲家.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"
    ]
},

我的 trait 是在其他测试中定义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。它之前工作正常,我没有更改相关类中的任何内容。

任何想法?

标签: symfonycomposer-phpphpunit

解决方案


原来的部分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 中的命名空间和类命名应该是区分大小写的。


推荐阅读