このPHPエラーが発生するのはなぜですか?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
このPHPエラーが発生するのはなぜですか?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
回答:
PHPUnitのドキュメントは 言う、PHPUnitの/ Framework.phpを要求/含めるために言うために使用されるよう、次のとおりです。
require_once ('PHPUnit/Framework/TestCase.php');
更新
PHPUnit 3.5以降、これを処理する組み込みのオートローダークラスがあります。
require_once 'PHPUnit/Autoload.php';
これを指摘してくれたフェニックスに感謝!
PHPUnit/Autoload.php
を持っていません、そしてPHPUnit/Framework/TestCase.php
私のフォルダは一種のようなものですPHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
2017-02-03にリリースされたphpunitをバージョン6以降に更新した後に(たとえばcomposerを使用して)ここに到着した場合、phpunitコードが名前空間になっているため、このエラーが発生する可能性があります(変更ログを確認)。
次のような\PHPUnit_Framework_TestCase
ことをリファクタリングする必要があります\PHPUnit\Framework\TestCase
以下のためにそれ以上のバージョンなどの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 {
}
ファイルに名前空間を付けたため、このエラーが発生する場合があります。その場合、バックスラッシュを前に付けることにより、PHPUnit_Framework_TestCaseがグローバル名前空間にあることを指定する必要があります。
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
class YourNiceTest extends PHPUnit_Framework_TestCase
のようにちょうど、拡張クラスの前に\を追加class YourNiceTest extends \PHPUnit_Framework_TestCase
-この使用して、私のために働いたSymfony 2.8
となど、phpunit
作曲ファイルでは、と地元の依存関係としてダウンロード"phpunit/phpunit": "^4.8"
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.php
(suffix
)にする必要があります。
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
テストスイートは次のコマンドで実行されます。
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
。あなたは本当に使用する必要があります... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
そしてそれからしなければならなかったことを言っているだけsudo chmod +x /usr/local/bin/phpunit
です。ファイルを移動する前に実行可能ファイルとして設定すると、Vagrant Ubuntuでは機能しませんでした。なぜだかわかりませんが、誰かがこれに苦労している場合は、これが役立つことを願っています。
私はZF2を使用し、「PHPUnit_Framework_TestCase」を「\ PHPUnit \ Framework \ TestCase」に置き換えたときに動作します
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
/ includes /ディレクトリの上のディレクトリに差分を保存します-私の場合、これはWordpressディレクトリ自体でした
Unixパッチツールを使用して、ファイルにパッチを適用します。また、絶対ディレクトリ構造から相対ディレクトリ構造に移動するには、最初の数個のスラッシュを取り除く必要があります。上記のポイント3からわかるように、インクルードディレクトリの前に5つのスラッシュがあり、-p5フラグを指定するとこのスラッシュが削除されます。
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
これを行った後、テストは再び正しく実行されました。
注意:コマンドphp bin/console generate:doctrine:crud
も作成TestController
するsrc/Tests
ため、サーバーがない場合にサーバーを起動しようとするとエラーが発生する可能性がありますUnitTests
。ファイルを削除して修正してください!