Pourquoi j'obtiens cette erreur PHP?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
La documentation PHPUnit dit utilisé pour dire d'inclure/require PHPUnit/Framework.php, comme suit:
require_once ('PHPUnit/Framework/TestCase.php');
METTRE À JOUR
Depuis PHPUnit 3.5, il existe une classe d'autoloader intégrée qui gérera cela pour vous:
require_once 'PHPUnit/Autoload.php';
Merci à Phoenix de l'avoir signalé!
Pour ceux qui arrivent ici après avoir mis à jour phpunit vers la version version 6 ou supérieure publiée le 03/02/2017 (par exemple avec composer), il est possible que vous obteniez cette erreur car le code phpunit est à présent en espace de noms (check changelog ).
Vous devrez refactoriser des éléments 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 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 parce que vous avez espacé le fichier. Si c'est le cas, vous devrez spécifier que PHPUnit_Framework_TestCase se trouve dans l'espace de noms global en le faisant précéder d'une barre oblique inverse:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
J'ai soumis un PR brutal pour entamer une conversation afin de corriger la documentation .
J'exécutais des tests PHPUnit sur PHP5, puis j'avais également besoin de supporter 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 devait ensuite 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 ensuite, lancez PHPunit test:
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 porter le nom *_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
Supposition:
Phpunit (3.7) est disponible dans l'environnement de la 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, à moins que vous ne souhaitiez pas être exécuté dans la console. Par exemple, exécuter des tests dans le navigateur.
AVIS: Command php bin/console generate:doctrine:crud
crée également TestController
dans src/Tests
afin qu'il puisse générer une erreur lorsque vous essayez de démarrer le serveur si vous n'avez pas UnitTests
. Supprimez le fichier, corrigez-le!
Pour moi, c'est parce que j'ai couru
$ phpunit .
au lieu de
$ phpunit
quand j’avais déjà un fichier phpunit.xml
configuré dans le répertoire de travail.
Si vous avez Centos ou une autre distribution Linux, vous devez installer le paquet phpunit, je l'ai fait avec yum install phpunit et cela a fonctionné. Peut-être que vous devrez peut-être 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 très bien que vous exécutiez des tests WordPress principaux et que vous ayez récemment mis à niveau votre PhpUnit vers la version 6. Si tel est le cas, la récente modification de l'espacement des noms dans PhpUnit aura endommagé votre code.
Heureusement, il existe un correctif pour les tests de base à l’adresse https://core.trac.wordpress.org/changeset/40547 qui contournera le problème. Il inclut également les modifications apportées à travis.yml, que vous ne pouvez pas avoir dans votre configuration; Si c'est le cas, vous devrez éditer le fichier .diff pour ignorer le correctif Travis.
Modifiez le fichier de correctif pour supprimer la partie Travis du correctif 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 correction Unix pour corriger les fichiers. Vous devrez également supprimer les premières barres obliques pour passer d'une structure de répertoires absolue à relative. Comme vous pouvez le voir au point 3 ci-dessus, il y a cinq barres obliques avant le répertoire d'inclusion, qu'un drapeau -p5 supprimera pour vous.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Après cela, mes tests se sont déroulés correctement.
J'utilise ZF2 et travaille pour moi lorsque je remplace «PHPUnit_Framework_TestCase» par «\ PHPUnit\Framework\TestCase».