当前位置: 首页 > 知识库问答 >
问题:

PHPUnit的编写器自动加载失败

澹台宾白
2023-03-14

我遇到了使用作曲家psr-4自动加载功能和PHPUnit的问题。问题发生在我的本地机器以及TravisCI版本上。单元测试无法找到我的类,而普通脚本可以找到。

当然,任何配置都有问题,但我无法找出我做错了什么。提前感谢你的帮助。

这是我的项目文件结构:

  • 公共/
  • src/
    • http/
      • urlhelper。php
      • 小黑
        • 超文本传输协议/
          • urlhelper.test.php

          这是我的作曲家的作品。json看起来像:

          {
              "require": {
                  "php": ">=5.4.0",
                  "nesbot/carbon": "1.*",
                  "ext-pdo": "*",
                  "predis/predis": "1.1.*@dev"
              },
              "require-dev": {
                  "satooshi/php-coveralls": "dev-master",
                  "phpunit/phpunit": ">=3.7"
              },
              "autoload": {
                  "psr-4": {
                      "BlackTie\\": "src/blacktie"
                  }
              }
          }
          

          PHPUnit配置定义了一个引导,其中包括主项目共享的脚本以及初始化psr-4自动加载器的测试和常见功能:init。php

          define('ROOT', __DIR__);
          
          // Composer-Autoloader
          require_once "vendor/autoload.php";
          
          // Framework library with common functions
          require_once "src/blacktie/lib.php";
          

          特拉维斯的命令行说:

          PHP致命错误:在/home/travis/build/jazzschmidt/black-tie/tests/BlackTie/Http/UrlHelper中找不到类'BlackTie\Http\UrlHelper'。测验php第38行

共有2个答案

施振海
2023-03-14

真丢脸-我错过了Composer自动加载功能处理区分大小写的文件。所以为了在Travis上运行测试,我只需要调整文件和目录的名称。但我不明白,为什么它能在我运行OSX的本地机器上工作,它也使用区分大小写的文件系统,是吗?

希望我能帮助遇到同样问题的人。

楚嘉
2023-03-14

正如您所发现的,要使您的代码在Linux系统上正常工作,您需要有正确的类名大小写。

它在mac上本地工作的原因是OSX没有完全区分大小写的文件系统。虽然它保留了文件和目录的大小写,但它将不同大小写的文件名解析为相同的存储路径,例如。

$ touch foo.txt
$ touch Foo.txt
$ ls -l
total 0
-rw-r--r--  1 danack  admin  0 18 Oct 16:32 foo.txt
$ touch Bar.txt
$ touch bar.txt
$ ls -l
total 0
-rw-r--r--  1 danack  admin  0 18 Oct 16:32 Bar.txt
-rw-r--r--  1 danack  admin  0 18 Oct 16:32 foo.txt

它类似地认为字符的预合成和去合成版本是相同的。即é(U 00E9)到e(U 0065)和结合急性重音(U 0301)

通过PHP可以更容易地显示这方面的示例:

<?php

touch("Am\xC3\xA9lie.txt");
touch("Am\x65\xCC\x81lie.txt");

生成一个名为Amélie.txt的文件。

虽然一开始这可能看起来很疯狂,但这意味着应用程序不需要担心字符的分解,你不会突然发现一个应用程序用一种表示保存一个文件,然后另一个应用程序将其保存为不同的表示。

 类似资料:
  • 我刚刚开始使用composer进行依赖关系管理,我很难弄清楚我是如何不遵守psr-4进行自动加载的,所以我来这里寻求建议。我有一个生成随机值的类,它已经在packagist上了。项目结构如下(我已将composer.json文件标记为A和B): 项目总监 composer.jsonA composer.jsonB 最后是RlandValue.php文件,它声明了ejFrancis命名空间 当我运行

  • 我不熟悉使用composer和psr-0。我尝试了一个使用composer和psr-0的小应用程序。我已经使用名称空间加载了一个特定的类。当我使用composer vendor/autoload调用一个类时,我得到了“未找到类”错误。 我的composer.json文件:/var/www/html/silexapp/composer.json 我的作曲家供应商自动加载文件:/var/www/htm

  • 我正试图用PhpUnit和Composer。为此,我做了: 1添加phpUnit到req作曲家部分: 2.根据需要安装: php编写器。phar安装--dev 手术成功结束。 安装phpunit/phpunit(3.7.6)下载:100% 不幸的是,当我想做测试时,我得到了 ./vendor/bin/phpunit PHP致命错误:对/home/serek/PHP/project/tests/bo

  • 我试图使用高斯,但我得到以下致命错误: 致命错误:类GuzzleHttp\ClientInterface在第13行的 /var/www/myapp/vendor/guzzlehttp/guzzle/src/functions.php中找不到 我正在使用composer autoloader自动加载: 发生了什么事? 编辑 我的composer.json: 编辑2 我的作曲家。锁 编辑3 编写器配置

  • 我已经设置了两个项目,一个“init”和一个库,这是init所需要的。它们都设置了PSR-0自动加载,但是库中的自动加载值不会添加到初始化项目中的供应商/作曲家/autoload_namespaces.php中。 示例作曲家。来自库的json: 示例作曲家。来自需要该库的项目的json: 该库包含文件src/LXP/library/Something中的类LXP\library\Something

  • 我正在开发一个使用Monolog的项目,需要Psr/log。当我通过自动加载使用Monolog时,它会抱怨缺少Psr\Log\LoggerInterface。所以我查看作曲家生成的autoload_namespaces.php,我找不到注册的Psr。 这是我的供应商/autoload_namespaces.php的内容 作曲家是否应该为composer.json文件中定义了{autoload}的所