Exécutez vos tests via la ligne de commande phpunit. Il charge les classes nécessaires.
Demi
Vous pouvez également utiliser la réponse de la réponse suivante stackoverflow.com/questions/42811164/… pour garder votre code compatible avec PHPUnit 6 ainsi que les versions antérieures.
Robson
Réponses:
73
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:
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
Merci, j'ai eu ce problème à cause de Travis CI utilisant la version la plus récente de PHPUnit sur leurs versions PHP 7. Ma solution consistait à télécharger manuellement un ancien phar et à l'utiliser à la place.
Merci beaucoup, bon monsieur. J'arrive en effet ici après la mise à niveau vers la version 6.
h4ckNinja
J'étais vraiment ennuyé que mes tests aient soudainement cessé de fonctionner. J'ai fait une mise à jour du compositeur et il a mis à jour mon PHPunit à 6.1. Merci.
Jed Lynch
38
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 namespaceusePHPUnit\Framework\TestCase;// extend using TestCase instead PHPUnit_Framework_TestCaseclassSampleTestextendsTestCase{}
Je ne sais pas une chose pareille. J'ai eu la même erreur alors
j'explore
13
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:
Oui, si vous avez fait cela: class YourNiceTest extends PHPUnit_Framework_TestCaseajoutez simplement le \ devant la classe étendue, comme dans class YourNiceTest extends \PHPUnit_Framework_TestCase- Cela a fonctionné pour moi, en utilisant Symfony 2.8et en incluant le phpunitfichier dans le composeur téléchargé en tant que dépendance locale avec"phpunit/phpunit": "^4.8"
Xavi Montero
12
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\TestCaseif(!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.
cette solution est importante si vous ne voulez pas toucher le code Civi \ Test mais devez être compatible avec le dernier test unitaire php basé sur un espace de noms
Configuration de la suite de tests: demosuite.xml. demoest un répertoire contenant tous les tests. Les fichiers de test doivent être nommés par *_test.php( suffix).
Cela ne fonctionne plus car PHPUnit les plus récents ne prend plus en charge les anciens noms de classe tels que PHPUnit_Framework_TestCase. Vous devez vraiment utiliser... extends PHPUnit\Framework\TestCase
Mikko Rantalainen
Juste en disant que je devais d'abord 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.
George Mylonas
4
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.
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:
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:crudcrée également TestControllerdans src/Testsafin 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!
Réponses:
La documentation PHPUnit
ditutilisé pour inclure / exiger PHPUnit / Framework.php, comme suit:METTRE À JOUR
Depuis PHPUnit 3.5, il existe une classe de chargeur automatique intégrée qui gérera cela pour vous:
Merci à Phoenix pour l'avoir signalé!
la source
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
etPHPUnit/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
la source
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
la source
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:
J'ai soumis un PR brut pour démarrer la conversation pour corriger la documentation .
la source
class YourNiceTest extends PHPUnit_Framework_TestCase
ajoutez simplement le \ devant la classe étendue, comme dansclass YourNiceTest extends \PHPUnit_Framework_TestCase
- Cela a fonctionné pour moi, en utilisantSymfony 2.8
et en incluant lephpunit
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:
Dans mon fichier d'amorçage PHPUnit (dans mon cas,
/tests/bootstrap.php
):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.
la source
Vous pouvez simplement installer PHPUnit pour exécuter des commandes ( https://github.com/sebastianbergmann/phpunit/#php-archive-phar ):
Exécuter un seul test
Et puis exécutez le test PHPunit:
Le contenu du fichier de test est le suivant:
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
).La suite de tests s'exécute avec les commandes suivantes:
la source
PHPUnit_Framework_TestCase
. Vous devez vraiment utiliser... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
et ensuitesudo 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:
Action:
Entrez la commande suivante dans la console:
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.
la source
J'utilise ZF2 et je travaille pour moi lorsque je remplace 'PHPUnit_Framework_TestCase' par '\ PHPUnit \ Framework \ TestCase'
la source
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)
la source
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:
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.
Après avoir fait cela, mes tests se sont à nouveau déroulés correctement.
la source
REMARQUER: commande
php bin/console generate:doctrine:crud
crée égalementTestController
danssrc/Tests
afin qu'elle puisse générer une erreur lorsque vous essayez de démarrer le serveur si vous ne l'avez pasUnitTests
. Supprimez le fichier corrigez-le!la source
Pour moi, c'est parce que j'ai couru
au lieu de
quand j'avais déjà un
phpunit.xml
fichier configuré dans le répertoire de travail.la source
J'utilise php 5.6 sur la fenêtre 10 avec la version zend 1.12 pour moi en ajoutant
avant
travaillé. Nous devons ajouter cette déclaration ci-dessus dans le fichier ControllerTestCase.php
la source