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

2022-08-30 18:26:09

我是PHPUnit的新手,在设置它以访问我的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 {}

但它一直说:

未找到类“应用程序\Dir1\File1”

我哪里出错了?


答案 1

如果您使用 Composer 安装了 PHPUnit,则可以使用 Composers 自动加载器。最简单的方法是添加:

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

to composer.json


答案 2

即使使用 ,您仍然必须包含该文件,方法是使用 、 、 或 ,或者使用 spl_autoload_register 来包含该文件,如下所示:useincluderequireinclude_oncerequire_once

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

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


推荐