![](/img/trans.png)
[英]PHP Fatal error: Class 'PHPUnit_Framework_TestCase' not found
[英]Why, Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...?
為什么我會收到這個 PHP 錯誤?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
對於那些在將 phpunit 更新到 2017 年 2月 3 日發布的版本 6 或更高版本(例如使用 composer)之后到達這里的人,您可能會收到此錯誤,因為 phpunit 代碼現在已命名空間(檢查更改日志)。
您需要將\\PHPUnit_Framework_TestCase
重構為\\PHPUnit\\Framework\\TestCase
PHPUnit 文檔說過去常說要包含/需要 PHPUnit/Framework.php,如下:
require_once ('PHPUnit/Framework/TestCase.php');
更新
從 PHPUnit 3.5 開始,有一個內置的自動加載器類可以為您處理這個問題:
require_once 'PHPUnit/Autoload.php';
感謝鳳凰指出這一點!
對於更高版本的 phpunit 如6.4必須使用命名空間PHPUnit\\Framework\\TestCase
使用TestCase代替PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
我在 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 來運行命令( 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 (3.7)在控制台環境中可用。
行動:
在控制台中輸入以下命令:
SHELL> phpunit "{{PATH TO THE FILE}}"
注釋:
除非您不想在控制台中運行,否則您不需要在新版本的 PHPUnit 中包含任何內容。 例如,在瀏覽器中運行測試。
我使用 ZF2 並在將 'PHPUnit_Framework_TestCase' 替換為 '\\PHPUnit\\Framework\\TestCase' 時為我工作
如果你有 Centos 或其他 Linux 發行版,你必須安裝 phpunit 包,我用 yum install phpunit 做到了這一點,它工作正常。 也許您必須添加一個存儲庫,但我認為它必須與默認存儲庫配合使用(我有 CentOS 7)
很可能您正在運行 WordPress 核心測試,並且最近將您的 PhpUnit 升級到第 6 版。如果是這種情況,那么最近對 PhpUnit 中命名空間的更改將破壞您的代碼。
幸運的是, https: //core.trac.wordpress.org/changeset/40547 上有一個核心測試補丁可以解決這個問題。 它還包括對 travis.yml 的更改,您的設置中可能沒有這些更改; 如果是這種情況,那么您需要編輯 .diff 文件以忽略 Travis 補丁。
如果不需要,請編輯補丁文件以刪除補丁的 Travis 部分。 從文件頂部刪除到這一行的正上方:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
將差異保存在 /includes/ 目錄上方的目錄中 - 在我的情況下,這是 Wordpress 目錄本身
使用 Unix 補丁工具修補文件。 您還需要去除前幾個斜杠以從絕對目錄結構移動到相對目錄結構。 從上面的第 3 點可以看出,包含目錄之前有五個斜杠, -p5 標志將為您刪除。
$ cd [WORDPRESS DIRECTORY] $ patch -p5 < changeset_40547.diff
完成此操作后,我的測試再次正確運行。
注意:命令php bin/console generate:doctrine:crud
也會在src/Tests
創建TestController
,因此如果您沒有UnitTests
,它可能會在您嘗試啟動服務器時拋出錯誤。 刪除文件修復它!
對我來說,那是因為我跑了
$ phpunit .
代替
$ phpunit
當我已經在工作目錄中有一個配置phpunit.xml
文件時。
我在窗口 10 上使用 php 5.6,我添加了 zend 1.12 版本
require_once 'PHPUnit/Autoload.php';
前
抽象類 Zend_Test_PHPUnit_ControllerTestCase 擴展 PHPUnit_Framework_TestCase
工作。 我們需要在 ControllerTestCase.php 文件中添加上面的語句
我得到了它
include("vendor/autoload.php");
在我的測試功能的頂部。
ping
功能 function ping($host){ $start=microtime(true); $fp=@fsockopen($host, 80, $errno, $errstr, 10); return (!$fp?'(Unknown)': round((microtime(true)-$start)*1000)); }
用法:
ping('google.com');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.