Warum bekomme ich diesen PHP-Fehler?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Warum bekomme ich diesen PHP-Fehler?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Antworten:
In der PHPUnit-Dokumentation heißt es, dass PHPUnit / Framework.php wie folgt eingeschlossen / benötigt wird:
require_once ('PHPUnit/Framework/TestCase.php');
AKTUALISIEREN
Ab PHPUnit 3.5 gibt es eine integrierte Autoloader-Klasse, die dies für Sie erledigt:
require_once 'PHPUnit/Autoload.php';
Vielen Dank an Phoenix für diesen Hinweis!
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
und PHPUnit/Framework/TestCase.php
mein Ordner ist wiePHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Für diejenigen, die nach der Aktualisierung von phpunit auf Version 6 oder höher, die am 03.02.2017 veröffentlicht wurde (z. B. mit Composer), hier ankommen , wird möglicherweise dieser Fehler angezeigt, da der phpunit-Code jetzt einen Namespace hat (siehe Änderungsprotokoll ).
Sie müssen Dinge Refactoring wie \PHPUnit_Framework_TestCase
zu\PHPUnit\Framework\TestCase
Für eine höhere Version von phpunit wie 6.4 müssen Sie den Namespace PHPUnit \ Framework \ TestCase verwenden
Verwenden Sie stattdessen TestCase PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
Möglicherweise wird dieser Fehler angezeigt, weil Sie die Datei mit einem Namespace versehen haben. In diesem Fall müssen Sie angeben, dass sich PHPUnit_Framework_TestCase im globalen Namespace befindet, indem Sie einen Backslash voranstellen:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
Ich reichte eine grobe PR ein , um ein Gespräch zur Korrektur der Dokumentation zu beginnen .
class YourNiceTest extends PHPUnit_Framework_TestCase
Fügen Sie einfach das \ vor der erweiterten Klasse hinzu, wie in class YourNiceTest extends \PHPUnit_Framework_TestCase
- Dies hat bei mir funktioniert, indem Sie Symfony 2.8
die phpunit
als lokale Abhängigkeit heruntergeladene Composer-Datei mit"phpunit/phpunit": "^4.8"
Ich habe PHPUnit-Tests auf PHP5 ausgeführt und musste dann auch PHP7 unterstützen. Das habe ich getan:
In composer.json:
"phpunit/phpunit": "~4.8|~5.7"
In meiner PHPUnit-Bootstrap-Datei (in meinem Fall /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');
Mit anderen Worten, dies funktioniert für Tests, die ursprünglich für PHPUnit 4 oder 5 geschrieben wurden, dann aber auch für PHPUnit 6 benötigt werden.
Sie können PHPUnit einfach installieren, um Befehle auszuführen ( 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
Führen Sie einen einzelnen Test durch
Führen Sie dann den PHPunit-Test aus:
phpunit test.php
Der Inhalt der Testdatei lautet wie folgt:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testSave()
{
}
}
Führen Sie die Testsuite aus
Konfiguration der Testsuite: demosuite.xml. demo
ist ein Verzeichnis, das alle Tests enthält. Testdateien müssen als *_test.php
( suffix
) benannt werden.
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
Die Testsuite wird mit folgenden Befehlen ausgeführt:
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. Sie müssen wirklich verwenden... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
und dann musste sudo chmod +x /usr/local/bin/phpunit
. Das Festlegen der Datei als ausführbare Datei vor dem Verschieben hat unter Vagrant Ubuntu nie funktioniert. Keine Ahnung warum ... Aber falls jemand damit zu kämpfen hat, hoffe ich, dass dies hilft.
Annahme:
Phpunit (3.7) ist in der Konsolenumgebung verfügbar.
Aktion:
Geben Sie den folgenden Befehl in die Konsole ein:
SHELL> phpunit "{{PATH TO THE FILE}}"
Bemerkungen:
Sie müssen nichts in die neuen Versionen von PHPUnit aufnehmen, es sei denn, Sie möchten nicht in der Konsole ausgeführt werden. Zum Beispiel Tests im Browser ausführen.
Ich benutze ZF2 und arbeite für mich, wenn 'PHPUnit_Framework_TestCase' durch '\ PHPUnit \ Framework \ TestCase' ersetzt wird.
Wenn Sie Centos oder eine andere Linux-Distribution haben, müssen Sie das phpunit-Paket installieren. Ich habe das mit yum install phpunit gemacht und es hat funktioniert. Möglicherweise müssen Sie ein Repository hinzufügen, aber ich denke, es muss reibungslos mit den Standard-Repository funktionieren (ich habe CentOS 7).
Es kann durchaus sein, dass Sie WordPress-Kerntests ausführen und kürzlich Ihre PhpUnit auf Version 6 aktualisiert haben. Wenn dies der Fall ist, hat die kürzlich vorgenommene Änderung des Namespaces in PhpUnit Ihren Code beschädigt.
Glücklicherweise gibt es unter https://core.trac.wordpress.org/changeset/40547 einen Patch für die Kerntests, der das Problem umgeht. Es enthält auch Änderungen an travis.yml, die Sie möglicherweise nicht in Ihrem Setup haben. Wenn dies der Fall ist, müssen Sie die DIFF-Datei bearbeiten, um den Travis-Patch zu ignorieren.
Bearbeiten Sie die Patch-Datei, um den Travis-Teil des Patches zu entfernen, wenn Sie dies nicht benötigen. Löschen Sie vom Anfang der Datei bis knapp über diese Zeile:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Speichern Sie den Unterschied im Verzeichnis über Ihrem Verzeichnis / include / - in meinem Fall war dies das Wordpress-Verzeichnis selbst
Verwenden Sie das Unix-Patch-Tool, um die Dateien zu patchen. Sie müssen auch die ersten Schrägstriche entfernen, um von einer absoluten zu einer relativen Verzeichnisstruktur zu wechseln. Wie Sie unter Punkt 3 oben sehen können, befinden sich vor dem Include-Verzeichnis fünf Schrägstriche, die durch ein -p5-Flag für Sie entfernt werden.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Danach liefen meine Tests wieder korrekt.
HINWEIS: Der Befehl php bin/console generate:doctrine:crud
create TestController
in wird ebenfalls erstellt, src/Tests
sodass beim Versuch, den Server zu starten, ein Fehler ausgelöst werden kann, wenn dies nicht der Fall ist UnitTests
. Entfernen Sie die Datei reparieren Sie es!
Ich benutze PHP 5.6 unter Windows 10 mit Zend 1.12 Version für mich
require_once 'PHPUnit / Autoload.php';
Vor
Die abstrakte Klasse Zend_Test_PHPUnit_ControllerTestCase erweitert PHPUnit_Framework_TestCase
hat funktioniert. Wir müssen diese obige Anweisung in die Datei ControllerTestCase.php einfügen