web-dev-qa-db-ja.com

なぜ、致命的なエラー:クラス 'PHPUnit_Framework_TestCase'が...に見つかりませんか?

なぜこのPHPエラーが発生するのですか?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
112
Alvin

PHPUnitドキュメント 言う 次のように、PHPUnit/Framework.phpを含める/要求するために使用されます。

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

UPDATE

PHPUnit 3.5の時点で、これを処理する組み込みのオートローダークラスがあります。

require_once 'PHPUnit/Autoload.php';

これを指摘してくれたPhoenixに感謝します!

69
defines

Phpunitを2017-02-03にリリースされたバージョン6以降に更新した後にここに到着した人(例:作曲家)の場合、このエラーが発生する可能性があります。 phpunitコードは名前空間になりました(チェック changelog )。

\PHPUnit_Framework_TestCaseから\PHPUnit\Framework\TestCaseなどのリファクタリングが必要になります

210
shadi

上位バージョン6.4などのphpunitの場合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 {

}
30
Jijesh Cherrai

ファイルの名前空間を指定したため、このエラーが発生する場合があります。その場合、バックスラッシュを前に付けて、PHPUnit_Framework_TestCaseがグローバル名前空間にあることを指定する必要があります。

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

ドキュメンテーション を訂正するための会話を開始するために 粗雑なPR を提出しました。

13
Bevan

PHP5でPHPUnitテストを実行していましたが、PHP7もサポートする必要がありました。これは私がやったことです:

Composer.jsonで:

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

PHPUnit bootstrapファイル(私の場合は/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でも機能する必要があります。

10
Nino Škopac

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
5
radeklos

仮定:

Phpunit(3.7)はコンソール環境で使用可能です。

アクション:

コンソールで次のコマンドを入力します。

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

コメント:

コンソールで実行したくない場合を除き、PHPUnitの新しいバージョンに何も含める必要はありません。たとえば、ブラウザでテストを実行します。

4
svirk

注意:コマンドphp bin/console generate:doctrine:crudsrc/TestsTestControllerを作成するため、UnitTestsがない場合にサーバーを起動しようとしたときにエラーがスローされる可能性があります。ファイルを削除して修正してください!

0
MorganFreeFarm

私にとって、それは私が走ったからでした

$ phpunit .

の代わりに

$ phpunit

作業ディレクトリに既にphpunit.xmlファイルが構成されていたとき。

0
cyberbit

Centosまたは他のLinuxディストリビューションを使用している場合、phpunitパッケージをインストールする必要がありますが、yum install phpunitを使用してそれを実行しました。リポジトリを追加する必要があるかもしれませんが、デフォルトのリポジトリでスムーズに動作する必要があると思います(CentOS 7があります)

0
Ricardo Herrero

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からわかるように、インクルードディレクトリの前に5つのスラッシュがあります。-p5フラグはこれを取り除きます。

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

これを行った後、テストは再び正しく実行されました。

0
piersb

ZF2を使用し、「PHPUnit_Framework_TestCase」を「\ PHPUnit\Framework\TestCase」に置き換えたときに動作します