簡體   English   中英

PHP 致命錯誤:Class 未找到 - PHPUnit

[英]PHP Fatal error: Class not found - PHPUnit

我正在嘗試在 PHP 項目中使用PHPUnit 這是我的項目結構(文件為斜體字體樣式)

  • 控制器

    • 頁面.php
  • 測試

    • 頁面Test.php
  • 小販

    • 垃圾桶
      • phpunit.bat
  • 作曲家.json

我的文件:

作曲家.json

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

頁面.php

<?php
namespace controllers

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

}

頁面Test.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()

您需要指向測試類,因此在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>

然后使用--configuration選項。

從根文件夾中調用phpunit

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

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>

嘗試composer dump-autoload -o ...

我遇到了同樣的錯誤,因為我沒有將 Class 命名為與 phpunit 調用的文件名相同的名稱。

例如我在打電話:

phpunit TEST_myweb_controller.php

其中有一個 class 定義: 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 定義更改為: class TEST_myweb_controller extends PHPUnit\Framework\TestCase

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM