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


127

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

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

9
あなたはまったく情報を提供していません。
ペッカ

phpunitコマンドラインを介してテストを実行します。必要なクラスをロードします。
2016年

また、次の回答stackoverflow.com/questions/42811164/…からの回答を使用して、コードをPHPUnit 6および以前のバージョンと互換性を保つことができます。
ロブソン2017年

回答:


73

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

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

更新

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

require_once 'PHPUnit/Autoload.php';

これを指摘してくれたフェニックスに感謝!


14
:PHPUnitの3.5かもしれないのヘルプキープ物事をシンプルにその独自のオートローダーが付属しています require_once 'PHPUnit/Autoload.php'

1
require_once( 'PHPUnit / Autoload.php')がベストプラクティスであることに同意します。
ポールメイド

1
私は両方PHPUnit/Autoload.phpを持っていません、そしてPHPUnit/Framework/TestCase.php私のフォルダは一種のようなものですPHPUnit/Framework/MockObject
Sufendy

4
そして今私は持っています PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
デニス

1
PHP 6+ためシャディの答え@見stackoverflow.com/a/42561590/2883328
デニス

237

2017-02-03にリリースされたphpunitをバージョン6以降に更新した後に(たとえばcomposerを使用して)ここに到着した場合、phpunitコードが名前空間になっているため、このエラーが発生する可能性があります(変更ログを確認)。

次のような\PHPUnit_Framework_TestCaseことをリファクタリングする必要があります\PHPUnit\Framework\TestCase


4
おかげで、PHP 7ビルドで最新のPHPUnitバージョンを使用しているTravis CIが原因でこの問題が発生しました。私の修正は、古いpharを手動でダウンロードして、代わりにそれを使用することでした。
DisgruntledGoat 2017年

2
github.com/sebastianbergmann/phpunit/wiki/…リリースノートの一番上にありますが、見逃しました
Qchmqs

親切にありがとうございます。バージョン6にアップグレードした後、私は実際にここに到着します
。– h4ckNinja

私のテストが突然機能しなくなったことに本当にイライラしていました。私は作曲家の更新を行い、PHPunitを6.1に更新しました。ありがとうございました。
ジェドリンチ2017

38

以下のためにそれ以上のバージョンなどのPHPUnitの6.4 あなたは、名前空間を使用する必要がありPHPUnitの\ Frameworkの\テストケースを

使用テストケースの代わりにPHPUnit_Framework_TestCaseを

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

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

}

私は昔のチュートリアル次られたとして、これは私のために働いていた優秀な

あなたはshadiの答えをコピーしました
Adam

@シャディなアダム?
Jijesh Cherrai

そんなことは知りません。同じエラーが発生した後、パッケージをクラックして回答を調べました
Jijesh Cherrai

13

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

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

ドキュメントを修正するための会話を始めるために、大まかなPRを提出しまし


1
あなたがした場合は、[はい、この:class YourNiceTest extends PHPUnit_Framework_TestCaseのようにちょうど、拡張クラスの前に\を追加class YourNiceTest extends \PHPUnit_Framework_TestCase-この使用して、私のために働いたSymfony 2.8となど、phpunit作曲ファイルでは、と地元の依存関係としてダウンロード"phpunit/phpunit": "^4.8"
シャビモンテロ

12

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でも機能する必要があります。


1
Civi \ Testコードに触れたくないが、最新の名前空間ベースの
PHP

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

3
最新のPHPUnitがなどの古いクラス名をサポートしなくなったため、これは機能しなくなりましたPHPUnit_Framework_TestCase。あなたは本当に使用する必要があります... extends PHPUnit\Framework\TestCase
Mikko Rantalainen

私は最初にmv phpunit /usr/local/bin/phpunitそしてそれからしなければならなかったことを言っているだけsudo chmod +x /usr/local/bin/phpunitです。ファイルを移動する前に実行可能ファイルとして設定すると、Vagrant Ubuntuでは機能しませんでした。なぜだかわかりませんが、誰かがこれに苦労している場合は、これが役立つことを願っています。
ジョージミロナス

4

仮定:

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

アクション:

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

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

コメント:

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



0

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


0

WordPressコアテストを実行していて、最近PhpUnitをバージョン6にアップグレードした可能性があります。その場合、PhpUnitのネームスペースに対する最近の変更により、コードが破損します。

幸い、https://core.trac.wordpress.org/changeset/40547にコアテストへのパッチがあり、問題を回避できます。また、travis.ymlへの変更も含まれています。その場合は、Travisパッチを無視するように.diffファイルを編集する必要があります。

  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

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


0

私にとっては、走ったからです

$ phpunit .

の代わりに

$ phpunit

phpunit.xml作業ディレクトリに構成済みファイルがすでにある場合。


0

私は追加するためにzend 1.12バージョンのウィンドウ10でphp 5.6を使用しています

require_once 'PHPUnit / Autoload.php';

抽象クラスZend_Test_PHPUnit_ControllerTestCaseは、PHPUnit_Framework_TestCaseを拡張します

働いた。ControllerTestCase.phpファイルに上記のステートメントを追加する必要があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.