PHP 致命错误: 找不到类 - PHPUnit

2022-08-30 16:04:51

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

  • 控制器

    • 页面.php
  • 测试

    • 页测试.php
  • 供应商

      • phpunit.bat
  • composer.json

我的文件:

composer.json

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

页面.php

<?php
namespace controllers

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

}

页测试.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()


答案 1

您需要指向测试的类,因此在 pagesTest 中.php添加一个 require:

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

或者,如果您使用的是自动加载,则可以在命令行中引导自动加载

phpunit --bootstrap src/autoload.php

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

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

然后,您可以将其与 --配置选项一起使用。


答案 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>

推荐