在PHPUnit中使用命名空间时“未找到类”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (205)

在设置它访问我的PHP文件时遇到了一些问题。我的应用程序使用的目录结构如下:

./phpunit.xml

./lib/Application/
  -> Dir1/File1.php (namespace = Application\Dir1)
  -> Dir1/File2.php
  -> Dir2/File1.php (namespace = Application\Dir2)

./tests/Application/Tests
  -> Test1.php (namespace = Application\Tests)
  -> Test2.php 

在我的PhpUnit.xml中,我有:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit verbose="false">
  <testsuites>
      <testsuite name="Application">
          <directory>./tests/Application/Tests</directory>
      </testsuite>
  </testsuites>
  <logging>
       <log type="coverage-text" target="php://stdout" showUncoveredFiles="false"/>
       <log type="json" target="/tmp/phpunit-logfile.json"/>
  </logging>
  <filter>
        <whitelist>
            <directory suffix=".php">./lib</directory>
        </whitelist>
  </filter>
</phpunit>

在我的一个测试文件中,我打开了:

namespace Application\Tests;

use Application\Dir1\File1;

class MyTest extends File1 {}

但它一直在说:

未找到类‘application\Dir1\file 1’

我哪里出错了?

提问于
用户回答回答于

即使你使用use,你还是要包含的文件,或者通过使用includerequireinclude_once,或require_once,或使用spl_autoload_register包含的文件,就像这样:

spl_autoload_register(function ($class)
{
    include '\lib\\' . $class . 'php';
});

当你尝试使用Application\Dir1\File1脚本时会自动运行include '\lib\Application\Dir1\File1.php'

用户回答回答于

如果使用Composer安装PHPUnit,那么可以使用ComposerAutomoloader。这样做的最简单方法是添加:

"autoload":{
    "psr-0":{
        "your-app-directory":""
    }
}

扫码关注云+社区

领取腾讯云代金券