簡體   English   中英

為什么,致命錯誤:在...中找不到類“PHPUnit_Framework_TestCase”?

[英]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 {

}

您可能會收到此錯誤,因為您對文件進行了命名空間。 如果是這樣,您需要通過在其前面加上反斜杠來指定 PHPUnit_Framework_TestCase 在全局命名空間中:

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

我提交了一份粗略的 PR以開始對話以糾正文檔

我在 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.phpsuffix )。

<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 補丁。

  1. https://core.trac.wordpress.org/changeset/40547底部下載“Unified Diff”補丁
  2. 如果不需要,請編輯補丁文件以刪除補丁的 Travis 部分。 從文件頂部刪除到這一行的正上方:

     Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. 將差異保存在 /includes/ 目錄上方的目錄中 - 在我的情況下,這是 Wordpress 目錄本身

  4. 使用 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");

在我的測試功能的頂部。




短而甜; 這對我有用:

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.

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