2011-05-19 98 views
75

爲什麼我得到這個PHP錯誤?爲什麼,致命錯誤:類'PHPUnit_Framework_TestCase'找不到...?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ... 
+7

你是你沒有提供任何信息。 – 2011-05-19 22:55:07

+0

通過phpunit命令行運行測試。它加載了必要的類。 – Halfstop 2016-05-24 17:05:14

+0

您也可以使用以下答案https://stackoverflow.com/questions/42811164/class-phpunit-framework-testcase-not-found/42828632#42828632保持您的代碼與PHPUnit 6以及早期版本兼容版本。 – Robson 2017-06-15 16:25:06

回答

63

PHPUnit documentation說:常說,包括/需要的PHPUnit/Framework.php如下:

require_once ('PHPUnit/Framework/TestCase.php'); 

UPDATE

截至PHPUnit的3.5,有一個內置的自動裝載機類,將爲您處理:

require_once 'PHPUnit/Autoload.php'; 

感謝鳳凰城指出這一點!

+14

PHPUnit 3.5帶有自己的自動加載器,可能有助於保持簡單:'require_once'PHPUnit/Autoload.php'' – 2011-05-20 00:30:43

+0

+1 Phoenix,我也推薦閱讀PHP中的自動加載,編寫自己的自動加載器腳本。 – defines 2011-05-20 11:49:02

+2

它在哪裏說的? – 2011-11-13 02:25:46

4

假設:

Phpunit (3.7) is available in the console environment.

操作:

請在控制檯執行以下命令:

SHELL> phpunit "{{PATH TO THE FILE}}" 

評論:

除非不想在控制檯中運行,否則不需要在新版本的PHPUnit中包含任何內容。例如,在瀏覽器中運行測試。

4

你可以簡單地安裝PHPUnit運行命令(https://github.com/sebastianbergmann/phpunit/#php-archive-phar):

wget https://phar.phpunit.de/phpunit.phar 
chmod +x phpunit.phar 
mv phpunit.phar /usr/local/bin/phpunit 

運行單個測試

然後運行PHPUnit的測試:

phpunit test.php 

測試文件的內容是如下:

<?php 

class StackTest extends PHPUnit_Framework_TestCase 
{ 
    protected function setUp() 
    { 
    } 

    public function testSave() 
    { 

    } 
} 

運行測試套件

測試套件的配置:demosuite.xml。 demo是包含所有測試的目錄。測試文件必須命名爲*_test.phpsuffix)。

<testsuites> 
    <testsuite name="DemoTestSuite"> 
     <directory suffix="test.php">demo</directory> 
    </testsuite> 
</testsuites> 

測試套件下面的命令運行:

phpunit -c demosuite.xml --testsuite DemoTestSuite 
13

因爲你命名空間的文件,你可能會得到這個錯誤。如果是這樣,你需要通過前面加一個反斜槓它指定爲PHPUnit_Framework_TestCase的全局命名空間中:

namespace AcmeInc\MyApplication\Tests 
class StackTest extends \PHPUnit_Framework_TestCase {} 

我提交a crude PR談話的開始糾正the documentation

+1

是的,如果你這樣做:'類YourNiceTest擴展PHPUnit_Framework_TestCase'只需在擴展類的前面加\,就像'class YourNiceTest extends \ PHPUnit_Framework_TestCase'一樣 - 這爲我工作,使用'Symfony 2.8'並在作曲者文件中包含'phpunit'作爲本地依賴項下載:'「phpunit/phpunit」:「^ 4.8」' – 2015-12-31 13:02:11

0

如果您有Centos或其他Linux發行版,您必須安裝phpunit軟件包,我使用yum install phpunit來完成此工作。也許你可以不得不添加一個倉庫,但我認爲它必須與默認的工作順利(我有CentOS 7)

109

對於那些在更新phpunit到版本6後發佈到2017-02-03(例如與作曲家),你可能會得到這個錯誤,因爲phpunit代碼現在命名空間(檢查changelog)。您需要重構如\PHPUnit_Framework_TestCase\PHPUnit\Framework\TestCase

+3

謝謝,由於Travis CI在他們的PHP 7版本上使用最新的PHPUnit版本,所以我遇到了這個問題。我的修復是手動下載一箇舊的phar並使用它。 – DisgruntledGoat 2017-03-13 17:12:02

+2

https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-6.0.0 它位於發行說明的頂部,但我錯過了它 – Qchmqs 2017-03-15 09:17:32

+0

謝謝你好,先生。升級到版本6後,我確實到了這裏。 – h4ckNinja 2017-05-13 04:20:15

0

這可能是因爲您正在運行WordPress核心測試,並且最近已將您的PhpUnit升級到版本6.如果是這種情況,那麼最近更改爲PhpUnit中的命名空間將破壞你的代碼。

幸運的是,在https://core.trac.wordpress.org/changeset/40547的核心測試中有一個補丁可以解決這個問題。它還包括對您的設置中可能沒有的travis.yml的更改;如果是這種情況,那麼你需要編輯.diff文件來忽略Travis補丁。

  1. 下載從https://core.trac.wordpress.org/changeset/40547
  2. 編輯補丁文件底部的「統一DIFF」補丁刪除補丁的特拉維斯一部分,如果你不需要這一點。從文件到略高於該行的頂部刪除:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php 
    
  3. 保存在你上面的/包括/目錄的目錄的存在 - 在我的情況,這是WordPress的目錄本身

  4. 使用Unix補丁工具來修補文件。您還需要刪除前幾個斜線以從絕對移動到相對目錄結構。從上面的第3點可以看到,在include目錄之前有五個斜槓,其中-p5標誌將爲您刪除。

    $ cd [WORDPRESS DIRECTORY] 
    $ patch -p5 < changeset_40547.diff 
    

我確實在這之後我的測試中再次正確運行。

6

我在PHP5上運行PHPUnit測試,然後我也需要支持PHP7。這是我做過什麼:

在composer.json:

"phpunit/phpunit": "~4.8|~5.7" 

在我PHPUnit的引導文件(在我的情況,/tests/bootstrap.php):

// PHPUnit 6 introduced a breaking change that 
// removed PHPUnit_Framework_TestCase as a base class, 
// and replaced it with \PHPUnit\Framework\TestCase 
if (!class_exists('\PHPUnit_Framework_TestCase') && class_exists('\PHPUnit\Framework\TestCase')) 
    class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase'); 

換句話說,這會爲工作這些測試最初是爲PHPUnit 4或5編寫的,但也需要在PHPUnit 6上進行工作。

3

對於更高版本 phpunit如6。4 必須使用命名空間PHPUnit的\框架\ TestCase的

使用的TestCase代替化PHPUnit_Framework_TestCase

// use the following namespace 
use PHPUnit\Framework\TestCase; 

// extend using TestCase instead PHPUnit_Framework_TestCase 
class SampleTest extends TestCase { 

} 
+0

這真的對我有用。謝謝。 – MKJ 2018-01-12 17:58:53

相關問題