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


PHP Fatal error: Class not found - PHPUnit

我试图在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()

您需要指向被测试的类,因此在pagest .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>

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

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

尝试composer dump-autoload -o命令

从根文件夹调用phpunit:

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

我得到了同样的错误,因为我没有将我的类命名为与phpunit调用的文件名相同。

。我在打电话:

phpunit TEST_myweb_controller.php

的类定义为:class web_controller_test extends PHPUnit'Framework'TestCase

返回错误:Class 'TEST_myweb_controller.php' could not be found in ''my'path'to'tests'TEST_myweb_controller.php'

为了解决这个问题,我将类定义更改为:class TEST_myweb_controller extends PHPUnit'Framework'TestCase