爲什麼我得到這個PHP錯誤?爲什麼,致命錯誤:類'PHPUnit_Framework_TestCase'找不到...?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
爲什麼我得到這個PHP錯誤?爲什麼,致命錯誤:類'PHPUnit_Framework_TestCase'找不到...?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
的PHPUnit documentation說:常說,包括/需要的PHPUnit/Framework.php如下:
require_once ('PHPUnit/Framework/TestCase.php');
UPDATE
截至PHPUnit的3.5,有一個內置的自動裝載機類,將爲您處理:
require_once 'PHPUnit/Autoload.php';
感謝鳳凰城指出這一點!
PHPUnit 3.5帶有自己的自動加載器,可能有助於保持簡單:'require_once'PHPUnit/Autoload.php'' – 2011-05-20 00:30:43
+1 Phoenix,我也推薦閱讀PHP中的自動加載,編寫自己的自動加載器腳本。 – defines 2011-05-20 11:49:02
它在哪裏說的? – 2011-11-13 02:25:46
假設:
Phpunit (3.7) is available in the console environment.
操作:
請在控制檯執行以下命令:
SHELL> phpunit "{{PATH TO THE FILE}}"
評論:
除非不想在控制檯中運行,否則不需要在新版本的PHPUnit中包含任何內容。例如,在瀏覽器中運行測試。
你可以簡單地安裝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.php
(suffix
)。
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
測試套件下面的命令運行:
phpunit -c demosuite.xml --testsuite DemoTestSuite
因爲你命名空間的文件,你可能會得到這個錯誤。如果是這樣,你需要通過前面加一個反斜槓它指定爲PHPUnit_Framework_TestCase的全局命名空間中:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
我提交a crude PR談話的開始糾正the documentation。
是的,如果你這樣做:'類YourNiceTest擴展PHPUnit_Framework_TestCase'只需在擴展類的前面加\,就像'class YourNiceTest extends \ PHPUnit_Framework_TestCase'一樣 - 這爲我工作,使用'Symfony 2.8'並在作曲者文件中包含'phpunit'作爲本地依賴項下載:'「phpunit/phpunit」:「^ 4.8」' – 2015-12-31 13:02:11
如果您有Centos或其他Linux發行版,您必須安裝phpunit軟件包,我使用yum install phpunit來完成此工作。也許你可以不得不添加一個倉庫,但我認爲它必須與默認的工作順利(我有CentOS 7)
對於那些在更新phpunit到版本6後發佈到2017-02-03(例如與作曲家),你可能會得到這個錯誤,因爲phpunit代碼現在命名空間(檢查changelog)。您需要重構如\PHPUnit_Framework_TestCase
至\PHPUnit\Framework\TestCase
謝謝,由於Travis CI在他們的PHP 7版本上使用最新的PHPUnit版本,所以我遇到了這個問題。我的修復是手動下載一箇舊的phar並使用它。 – DisgruntledGoat 2017-03-13 17:12:02
https://github.com/sebastianbergmann/phpunit/wiki/Release-Announcement-for-PHPUnit-6.0.0 它位於發行說明的頂部,但我錯過了它 – Qchmqs 2017-03-15 09:17:32
謝謝你好,先生。升級到版本6後,我確實到了這裏。 – h4ckNinja 2017-05-13 04:20:15
這可能是因爲您正在運行WordPress核心測試,並且最近已將您的PhpUnit升級到版本6.如果是這種情況,那麼最近更改爲PhpUnit中的命名空間將破壞你的代碼。
幸運的是,在https://core.trac.wordpress.org/changeset/40547的核心測試中有一個補丁可以解決這個問題。它還包括對您的設置中可能沒有的travis.yml的更改;如果是這種情況,那麼你需要編輯.diff文件來忽略Travis補丁。
編輯補丁文件底部的「統一DIFF」補丁刪除補丁的特拉維斯一部分,如果你不需要這一點。從文件到略高於該行的頂部刪除:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
保存在你上面的/包括/目錄的目錄的存在 - 在我的情況,這是WordPress的目錄本身
使用Unix補丁工具來修補文件。您還需要刪除前幾個斜線以從絕對移動到相對目錄結構。從上面的第3點可以看到,在include目錄之前有五個斜槓,其中-p5標誌將爲您刪除。
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
我確實在這之後我的測試中再次正確運行。
我在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上進行工作。
對於更高版本 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 {
}
這真的對我有用。謝謝。 – MKJ 2018-01-12 17:58:53
你是你沒有提供任何信息。 – 2011-05-19 22:55:07
通過phpunit命令行運行測試。它加載了必要的類。 – Halfstop 2016-05-24 17:05:14
您也可以使用以下答案https://stackoverflow.com/questions/42811164/class-phpunit-framework-testcase-not-found/42828632#42828632保持您的代碼與PHPUnit 6以及早期版本兼容版本。 – Robson 2017-06-15 16:25:06