【问题标题】:PHP Fatal error: Class not found - PHPUnitPHP 致命错误:找不到类 - PHPUnit
【发布时间】:2022-01-02 07:37:21
【问题描述】:

我正在尝试在 PHP 项目中使用 PHPUnit。 这是我的项目结构(文件为斜体)

  • 控制器

    • Pages.php
  • 测试

    • pagesTest.php
  • 供应商

      • phpunit.bat
  • composer.json

我的文件:

composer.json

{
    "require-dev": {
        "phpunit/phpunit":"5.5.4"
    }
}

Pages.php

<?php
namespace controllers

class Pages
{
    public function render()
    {
        return 'Hello World';
    }

}

pagesTest.php

<?php

class PagesTest extends PHPUnit_Framework_TestCase
{
    public function testRenderReturnsHelloWorld()
    {
        $pages = new \controllers\Pages();
        $expected = 'Hello Word';
        $this->assertEquals($expected, $pages->render());
    }
}

当我打开命令行时,我会写:

C:\xampp\htdocs\PHPUnitTestProject\vendor\bin>phpunit ../../tests/PagesTest.php

我收到此错误消息:PHP Fatal error: Class 'controllers\Pages' not found in C:\xampp\htdocs\PHPUnitTestProject\tests\pagesTest.php on line 7

这是一个路径问题。我认为这是因为它搜索不存在的C:\xampp\htdocs\PHPUnitTestProject\vendor\bin\controllers\Pages()
应该是C:\xampp\htdocs\PHPUnitTestProject\controllers\Pages()

【问题讨论】:

  • 这是题外话,但请务必使用符合 PSR-4 standard 的文件名。 PageTest.php 而不是 pageTest.php

标签: php phpunit


【解决方案1】:

你需要指向被测试的类,所以在 pagesTest.php 中添加一个 require:

require __DIR__ . "/../controllers/Pages.php";

或者如果你正在使用自动加载,那么你可以在你的命令行中bootstrap the autoload

phpunit --bootstrap src/autoload.php

或者你可以像这个例子一样设置一个phpunit.xml配置文件(来自我上面链接的PHPUnit页面):

<phpunit bootstrap="src/autoload.php">
  <testsuites>
    <testsuite name="money">
      <directory>tests</directory>
    </testsuite>
  </testsuites>
</phpunit>

然后将其与 --configuration 选项一起使用。

【讨论】:

  • 如果我完成了上述所有操作但仍然出现该错误怎么办?
  • @AntonyD'Andrea 一些额外的尝试...对于要求,这可能是路径问题,回显__DIR__。确保它是你所想的路径,如果你使用 Composer,你可以运行composer dumpautoload,或者如果它看起来卡住了,你可以删除供应商文件并运行composer update作为绝望的措施,但是这也将更新依赖项。祝你好运!
  • 谢谢,原来这与 PHPUnit 6.0 有关,我在 5.7 上运行(我正在使用其他人的库)
【解决方案2】:

phpunit.xml.dist 中添加 bootstrap="vendor/autoload.php" 为我解决了这个问题。

<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"> <!-- in here -->
    <php>
        <!-- ... -->
    </php>
    <testsuites>
       <!-- ... -->
    </testsuites>
</phpunit>

【讨论】:

    【解决方案3】:

    试试composer dump-autoload -o 命令

    【讨论】:

      【解决方案4】:

      从根文件夹调用phpunit

      $ cd C:\xampp\htdocs\PHPUnitTestProject\
      $ vendor\bin\phpunit tests/PagesTest.php
      

      【讨论】:

        猜你喜欢
        • 2013-09-27
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-11
        • 2015-03-20
        • 2013-08-16
        相关资源
        最近更新 更多