なぜこのPHPエラーが発生するのですか?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
PHPUnitドキュメント 言う 次のように、PHPUnit/Framework.phpを含める/要求するために使用されます。
require_once ('PHPUnit/Framework/TestCase.php');
UPDATE
PHPUnit 3.5の時点で、これを処理する組み込みのオートローダークラスがあります。
require_once 'PHPUnit/Autoload.php';
これを指摘してくれたPhoenixに感謝します!
Phpunitを2017-02-03にリリースされたバージョン6以降に更新した後にここに到着した人(例:作曲家)の場合、このエラーが発生する可能性があります。 phpunitコードは名前空間になりました(チェック changelog )。
\PHPUnit_Framework_TestCase
から\PHPUnit\Framework\TestCase
などのリファクタリングが必要になります
上位バージョン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 {
}
ファイルの名前空間を指定したため、このエラーが発生する場合があります。その場合、バックスラッシュを前に付けて、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 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でも機能する必要があります。
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の新しいバージョンに何も含める必要はありません。たとえば、ブラウザでテストを実行します。
注意:コマンドphp bin/console generate:doctrine:crud
もsrc/Tests
にTestController
を作成するため、UnitTests
がない場合にサーバーを起動しようとしたときにエラーがスローされる可能性があります。ファイルを削除して修正してください!
私にとって、それは私が走ったからでした
$ phpunit .
の代わりに
$ phpunit
作業ディレクトリに既にphpunit.xml
ファイルが構成されていたとき。
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からわかるように、インクルードディレクトリの前に5つのスラッシュがあります。-p5フラグはこれを取り除きます。
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
これを行った後、テストは再び正しく実行されました。
ZF2を使用し、「PHPUnit_Framework_TestCase」を「\ PHPUnit\Framework\TestCase」に置き換えたときに動作します