web-dev-qa-db-fra.com

Pourquoi, Erreur fatale: La classe 'PHPUnit_Framework_TestCase' n'est pas trouvée dans ...?

Pourquoi j'obtiens cette erreur PHP?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
101
Alvin

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é!

68
defines

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

183
shadi

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 {

}
24
Jijesh Cherrai

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 .

13
Bevan

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.

9
Nino Škopac

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
5
radeklos

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.

4
svirk

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!

0
MorganFreeFarm

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.

0
cyberbit

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)

0
Ricardo Herrero

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.

  1. Téléchargez le correctif "Unified Diff" au bas de https://core.trac.wordpress.org/changeset/40547
  2. 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
    
  3. 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.

  4. 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.

0
piersb

J'utilise ZF2 et travaille pour moi lorsque je remplace «PHPUnit_Framework_TestCase» par «\ PHPUnit\Framework\TestCase».