なぜこのPHPエラーが発生するのですか?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
なぜこのPHPエラーが発生するのですか?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
2017-02-03にリリースされたバージョン6以降にphpunitを更新した後にここに到着した場合(composerなど)、phpunitコードの名前空間が変更されたため、このエラーが発生する可能性があります(changelogを確認してください)。
\PHPUnit_Framework_TestCase
次のようなものをリファクタリングする必要があります\PHPUnit\Framework\TestCase
PHPUnitのドキュメントに は、次のようにPHPUnit/Framework.phpを含める/必要とするというものがあります。
require_once ('PHPUnit/Framework/TestCase.php');
アップデート
PHPUnit 3.5の時点で、これを処理する組み込みのオートローダークラスがあります。
require_once 'PHPUnit/Autoload.php';
これを指摘してくれたPhoenixに感謝します!
6.4などのphpunitの上位バージョンの場合、名前空間PHPUnit \ Framework\TestCase を使用する必要があります
PHPUnit_Framework_TestCaseの代わりに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用に作成されたテストで機能しますが、PHPUnit6でも機能する必要があります。
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パッケージをインストールする必要があります。これは、yuminstallphpunitを使用して実行しました。リポジトリを追加する必要があるかもしれませんが、デフォルトのリポジトリでスムーズに動作する必要があると思います(CentOS 7を使用しています)
WordPressコアテストを実行していて、最近PhpUnitをバージョン6にアップグレードした可能性があります。その場合、PhpUnitの名前空間への最近の変更によりコードが破損します。
幸い、 https://core.trac.wordpress.org/changeset/40547にコアテストへのパッチがあり、問題を回避できます。また、セットアップに含まれていない可能性のあるtravis.ymlへの変更も含まれています。その場合は、Travisパッチを無視するように.diffファイルを編集する必要があります。
パッチファイルを編集して、必要がない場合はパッチのTravis部分を削除します。ファイルの先頭からこの行のすぐ上まで削除します。
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
/ include /ディレクトリの上のディレクトリにdiffを保存します-私の場合、これはWordpressディレクトリ自体でした
Unixパッチツールを使用してファイルにパッチを適用します。また、絶対ディレクトリ構造から相対ディレクトリ構造に移動するには、最初のいくつかのスラッシュを削除する必要があります。上記のポイント3からわかるように、includeディレクトリの前に5つのスラッシュがあり、-p5フラグによって削除されます。
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
これを行った後、テストは再び正しく実行されました。
注意:コマンドphp bin/console generate:doctrine:crud
も作成TestController
されるsrc/Tests
ため、サーバーを起動しようとしたときにエラーが発生する可能性がありますUnitTests
。ファイルを削除して修正してください!
私にとって、それは私が走ったからでした
$ phpunit .
それ以外の
$ phpunit
作業ディレクトリにすでに構成済みのphpunit.xml
ファイルがある場合。
私は追加するためにzend1.12バージョンでウィンドウ10でphp5.6を使用しています
require_once'PHPUnit / Autoload.php';
前
抽象クラスZend_Test_PHPUnit_ControllerTestCaseはPHPUnit_Framework_TestCaseを拡張します
働いた。上記のステートメントをControllerTestCase.phpファイルに追加する必要があります
私はそれを動作させました
include("vendor/autoload.php");
テスト関数の上部にあります。