Pourquoi j'obtiens cette erreur PHP?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Pourquoi j'obtiens cette erreur PHP?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Réponses:
La documentation PHPUnit dit utilisé pour inclure / exiger PHPUnit / Framework.php, comme suit:
require_once ('PHPUnit/Framework/TestCase.php');
METTRE À JOUR
Depuis PHPUnit 3.5, il existe une classe de chargeur automatique intégrée qui gérera cela pour vous:
require_once 'PHPUnit/Autoload.php';
Merci à Phoenix pour l'avoir signalé!
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
et PHPUnit/Framework/TestCase.php
mon dossier est un peu commePHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Pour ceux qui arrivent ici après la mise à jour phpunit à la version 6 ou plus publiée le 03/02/2017 (par exemple avec le compositeur), vous pouvez obtenir cette erreur parce que le code de PHPUnit est maintenant un espace de noms (chèque changelog ).
Vous aurez besoin de factoriser des choses comme \PHPUnit_Framework_TestCase
à\PHPUnit\Framework\TestCase
Pour une version supérieure de phpunit telle que 6.4, vous devez utiliser l'espace de noms PHPUnit \ Framework \ TestCase
utilisez TestCase à la place de PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
Vous pouvez obtenir cette erreur car vous avez placé le fichier dans un espace de noms. Si c'est le cas, vous devrez spécifier que PHPUnit_Framework_TestCase se trouve dans l'espace de noms global en le précédant d'une barre oblique inverse:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
J'ai soumis un PR brut pour démarrer la conversation pour corriger la documentation .
class YourNiceTest extends PHPUnit_Framework_TestCase
ajoutez simplement le \ devant la classe étendue, comme dans class YourNiceTest extends \PHPUnit_Framework_TestCase
- Cela a fonctionné pour moi, en utilisant Symfony 2.8
et en incluant le phpunit
fichier dans le composeur téléchargé en tant que dépendance locale avec"phpunit/phpunit": "^4.8"
J'exécutais des tests PHPUnit sur PHP5, puis je devais également prendre en charge PHP7. C'est ce que j'ai fait:
Dans composer.json:
"phpunit/phpunit": "~4.8|~5.7"
Dans mon fichier d'amorçage PHPUnit (dans mon cas, /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');
En d'autres termes, cela fonctionnera pour les tests écrits à l'origine pour PHPUnit 4 ou 5, mais nécessaires pour fonctionner également sur PHPUnit 6.
Vous pouvez simplement installer PHPUnit pour exécuter des commandes ( 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
Exécuter un seul test
Et puis exécutez le test PHPunit:
phpunit test.php
Le contenu du fichier de test est le suivant:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testSave()
{
}
}
Exécuter la suite de tests
Configuration de la suite de tests: demosuite.xml. demo
est un répertoire contenant tous les tests. Les fichiers de test doivent être nommés par *_test.php
( suffix
).
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
La suite de tests s'exécute avec les commandes suivantes:
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. Vous devez vraiment utiliser... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
et ensuite sudo chmod +x /usr/local/bin/phpunit
. Définir le fichier comme exécutable avant de le déplacer n'a jamais fonctionné sur Vagrant Ubuntu. Je ne sais pas pourquoi ... Mais au cas où quelqu'un aurait du mal avec ça, j'espère que cela aidera.
Supposition:
Phpunit (3.7) est disponible dans l'environnement console.
Action:
Entrez la commande suivante dans la console:
SHELL> phpunit "{{PATH TO THE FILE}}"
Commentaires:
Vous n'avez pas besoin d'inclure quoi que ce soit dans les nouvelles versions de PHPUnit, sauf si vous ne souhaitez pas exécuter dans la console. Par exemple, exécuter des tests dans le navigateur.
J'utilise ZF2 et je travaille pour moi lorsque je remplace 'PHPUnit_Framework_TestCase' par '\ PHPUnit \ Framework \ TestCase'
Si vous avez Centos ou une autre distribution Linux, vous devez installer le package phpunit, je l'ai fait avec yum install phpunit et cela a fonctionné. Peut-être que vous pouvez avoir à ajouter un référentiel, mais je pense que cela doit fonctionner correctement avec ceux par défaut (j'ai CentOS 7)
Il se peut que vous exécutiez des tests de base de WordPress et que vous ayez récemment mis à jour votre PhpUnit vers la version 6. Si tel est le cas, alors la récente modification de l'espace de noms dans PhpUnit aura cassé votre code.
Heureusement, il existe un correctif pour les tests de base sur https://core.trac.wordpress.org/changeset/40547 qui contournera le problème. Il inclut également les modifications apportées à travis.yml, que vous n'avez peut-être pas dans votre configuration; si tel est le cas, vous devrez modifier le fichier .diff pour ignorer le patch Travis.
Modifiez le fichier de patch pour supprimer la partie Travis du patch si vous n'en avez pas besoin. Supprimer du haut du fichier juste au-dessus de cette ligne:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Enregistrez le diff dans le répertoire au-dessus de votre répertoire / includes / - dans mon cas, il s'agissait du répertoire Wordpress lui-même
Utilisez l'outil de patch Unix pour patcher les fichiers. Vous devrez également supprimer les premières barres obliques pour passer d'une structure de répertoire absolue à une structure de répertoire relative. Comme vous pouvez le voir au point 3 ci-dessus, il y a cinq barres obliques avant le répertoire d'inclusion, dont un indicateur -p5 se débarrassera pour vous.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Après avoir fait cela, mes tests se sont à nouveau déroulés correctement.
REMARQUER: commande php bin/console generate:doctrine:crud
crée également TestController
dans src/Tests
afin qu'elle puisse générer une erreur lorsque vous essayez de démarrer le serveur si vous ne l'avez pas UnitTests
. Supprimez le fichier corrigez-le!
J'utilise php 5.6 sur la fenêtre 10 avec la version zend 1.12 pour moi en ajoutant
require_once 'PHPUnit / Autoload.php';
avant
la classe abstraite Zend_Test_PHPUnit_ControllerTestCase étend PHPUnit_Framework_TestCase
travaillé. Nous devons ajouter cette déclaration ci-dessus dans le fichier ControllerTestCase.php