Perché, errore irreversibile: classe 'PHPUnit_Framework_TestCase' non trovata in ...?


127

Perché visualizzo questo errore PHP?

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

9
Non stai fornendo alcuna informazione.
Pekka,

Esegui i test tramite la riga di comando phpunit. Carica le classi necessarie.
Halfstop,

Puoi anche usare la risposta dalla seguente risposta stackoverflow.com/questions/42811164/… per mantenere il tuo codice compatibile con PHPUnit 6 e con le versioni precedenti.
Robson,

Risposte:


73

La documentazione di PHPUnit dice usata per dire di includere / richiedere PHPUnit / Framework.php, come segue:

require_once ('PHPUnit/Framework/TestCase.php');

AGGIORNARE

A partire da PHPUnit 3.5, esiste una classe di caricatore automatico integrata che gestirà questo per te:

require_once 'PHPUnit/Autoload.php';

Grazie a Phoenix per averlo segnalato!


14
PHPUnit 3.5 viene fornito con un proprio caricatore automatico che potrebbe aiutare a semplificare le cose: require_once 'PHPUnit/Autoload.php'

1
Sono d'accordo che Require_once ('PHPUnit / Autoload.php') è la migliore pratica.
Paul Maidment,

1
Non ho entrambi PHPUnit/Autoload.phpe PHPUnit/Framework/TestCase.php, la mia cartella è un po 'comePHPUnit/Framework/MockObject
Sufendy il

4
e ora ho PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Dennis

1
vedi la risposta di @ shadi per PHP 6+ stackoverflow.com/a/42561590/2883328
Dennis

237

Per coloro che arrivano qui dopo l'aggiornamento phpunit alla versione 6 o superiore rilasciato il 2017/02/03 (ad esempio, con il compositore), si può essere sempre questo errore perché il codice phpunit è ormai namespace (controllo changelog ).

Avrete bisogno di refactoring cose come \PHPUnit_Framework_TestCasead\PHPUnit\Framework\TestCase


4
Grazie, ho avuto questo problema a causa di Travis CI che utilizzava la versione PHPUnit più recente sui loro build PHP 7. La mia correzione era scaricare manualmente un vecchio Phar e usarlo invece.
Sconcertato

2
github.com/sebastianbergmann/phpunit/wiki/… è in cima alle note di rilascio, ma l'ho perso
Qchmqs

Grazie gentilmente, buon signore. Sto davvero arrivando qui dopo l'aggiornamento alla versione 6.
h4ckNinja

Mi stavo davvero seccando che i miei test improvvisamente smettessero di funzionare. Ho fatto un aggiornamento del compositore e ha aggiornato la mia PHPunit alla 6.1. Grazie.
Jed Lynch,

38

Per versioni successive di phpunit come 6.4 È necessario utilizzare lo spazio dei nomi PHPUnit \ Framework \ TestCase

usa TestCase invece PHPUnit_Framework_TestCase

// use the following namespace
use PHPUnit\Framework\TestCase;

// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {

}

Eccellente questo ha funzionato per me mentre stavo seguendo un vecchio tutorial

hai appena copiato la risposta di Shadi
Adam,

@Adam chi è shadi?
Jijesh Cherrai il

Non so una cosa del genere. Ho avuto lo stesso errore, quindi ho esplorato la risposta rompendo il pacchetto
Jijesh Cherrai il

13

È possibile che venga visualizzato questo errore perché il nome è stato spaziato nel file. In tal caso, dovrai specificare che PHPUnit_Framework_TestCase si trova nello spazio dei nomi globale precedendolo con una barra rovesciata:

namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}

Ho inviato un PR grezzo per iniziare la conversazione per correggere la documentazione .


1
Sì, se hai fatto questo: class YourNiceTest extends PHPUnit_Framework_TestCaseaggiungi il \ davanti alla classe estesa, come in class YourNiceTest extends \PHPUnit_Framework_TestCase- Funzionava per me, usando Symfony 2.8e includendo il phpunitfile nel compositore scaricato come dipendenza locale con"phpunit/phpunit": "^4.8"
Xavi Montero

12

Stavo eseguendo i test di PHPUnit su PHP5 e quindi dovevo supportare anche PHP7. Questo è quello che ho fatto:

In composer.json:

"phpunit/phpunit": "~4.8|~5.7"

Nel mio file bootstrap di PHPUnit (nel mio caso /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');

In altre parole, questo funzionerà per i test scritti originariamente per PHPUnit 4 o 5, ma poi anche per PHPUnit 6.


1
questa soluzione è importante se non si desidera toccare il codice Civi \ Test ma è necessario essere compatibile con l'ultimo test dell'unità php basata sullo spazio dei nomi
Shahadat Hossain Khan

6

Puoi semplicemente installare PHPUnit per eseguire i comandi ( 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

Esegui test singolo

E quindi eseguire il test PHPunit:

phpunit test.php

Il contenuto del file di prova è il seguente:

<?php

class StackTest extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
    }

    public function testSave()
    {

    }
}

Esegui la suite di test

Configurazione della suite di test: demosuite.xml. demoè una directory che contiene tutti i test. I file di test devono essere denominati come *_test.php( suffix).

<testsuites>
    <testsuite name="DemoTestSuite">
        <directory suffix="test.php">demo</directory>
    </testsuite>
</testsuites>

La suite di test viene eseguita con i seguenti comandi:

phpunit -c demosuite.xml --testsuite DemoTestSuite

3
Questo non funziona più perché latest PHPUnit non supporta più vecchi nomi di classe come PHPUnit_Framework_TestCase. Devi davvero usare... extends PHPUnit\Framework\TestCase
Mikko Rantalainen il

Dicevo solo che dovevo prima mv phpunit /usr/local/bin/phpunite poi sudo chmod +x /usr/local/bin/phpunit. L'impostazione del file come eseguibile prima di spostarlo non ha mai funzionato su Vagrant Ubuntu. Non ho idea del perché ... Ma nel caso qualcuno stia lottando con questo, spero che questo possa aiutare.
George Mylonas,

4

Assunzione:

Phpunit (3.7) è disponibile nell'ambiente console.

Azione:

Immettere il comando seguente nella console:

SHELL> phpunit "{{PATH TO THE FILE}}"

Commenti:

Non è necessario includere nulla nelle nuove versioni di PHPUnit a meno che non si desideri eseguire nella console. Ad esempio, l'esecuzione di test nel browser.



0

Se hai Centos o altra distribuzione Linux devi installare il pacchetto phpunit, l'ho fatto con yum install phpunit e ha funzionato. Forse potresti dover aggiungere un repository, ma penso che debba funzionare senza problemi con quelli predefiniti (ho CentOS 7)


0

Può darsi che tu stia eseguendo i test di base di WordPress e di recente hai aggiornato PhpUnit alla versione 6. In tal caso, la recente modifica allo spazio dei nomi in PhpUnit ha infranto il tuo codice.

Fortunatamente, c'è una patch per i test fondamentali su https://core.trac.wordpress.org/changeset/40547 che risolverà il problema. Include anche modifiche a travis.yml, che potresti non avere nella tua configurazione; in tal caso, dovrai modificare il file .diff per ignorare la patch Travis.

  1. Scarica la patch "Unified Diff" dalla parte inferiore di https://core.trac.wordpress.org/changeset/40547
  2. Modifica il file patch per rimuovere la parte Travis della patch se non ti serve. Elimina dalla parte superiore del file appena sopra questa riga:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. Salva il diff nella directory sopra la tua directory / Includes / - nel mio caso questa era la stessa directory di Wordpress

  4. Utilizzare lo strumento patch Unix per patchare i file. Dovrai anche eliminare le prime barre per passare da una struttura di directory assoluta a una relativa. Come puoi vedere dal punto 3 sopra, ci sono cinque barre prima della directory include, di cui un flag -p5 si libererà per te.

    $ cd [WORDPRESS DIRECTORY]
    $ patch -p5 < changeset_40547.diff 

Dopo averlo fatto, i miei test sono stati eseguiti di nuovo correttamente.


0

AVVISO:php bin/console generate:doctrine:crud anche il comando crea TestControllerin src/Testsmodo che possa generare errori quando si tenta di avviare il server in caso contrario UnitTests. Rimuovi il file risolvilo!


0

Per me, è stato perché ho corso

$ phpunit .

invece di

$ phpunit

quando avevo già un phpunit.xmlfile configurato nella directory di lavoro.


0

Sto usando php 5.6 su Windows 10 con zend 1.12 versione per me aggiungendo

require_once 'PHPUnit / Autoload.php';

prima

classe astratta Zend_Test_PHPUnit_ControllerTestCase estende PHPUnit_Framework_TestCase

lavorato. Dobbiamo aggiungere questa affermazione sopra nel file ControllerTestCase.php

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.