symfony - 更新 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
。它之前工作正常,我没有更改相关类中的任何内容。
任何想法?
解决方案
原来的部分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 中的命名空间和类命名应该是区分大小写的。
推荐阅读
- html - 使用 Flex CSS 后立即在中间对齐一个项目和下一个项目
- mysql - 使用内连接从表 A 或表 B 中删除一行
- powerbi - 在 Power BI 中将下拉列表中的切片器值更改为每月到季度
- python - 为scrapy中的每个类别制作单独的输出文件
- python - 从 pcap 文件中读取目标 IP 的问题
- python - 查找numpy数组曲线的拐点
- angular - Angular 8:通用和 i18n - 无法在本地提供应用程序
- apache-kafka - 卡夫卡没有向消费者发送足够的消息
- sql - 确定每个用户当天的第一个活动
- excel - 查找不同 ID 的重叠日期