¿Por qué, error grave: la clase 'PHPUnit_Framework_TestCase' no se encuentra en ...?

127

¿Por qué recibo este error de PHP?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Alvin
fuente
9
No está proporcionando ninguna información en absoluto.
Pekka
Ejecute sus pruebas a través de la línea de comando phpunit. Carga las clases necesarias.
Halfstop
También puede usar la respuesta de la siguiente respuesta stackoverflow.com/questions/42811164/… para mantener su código compatible con PHPUnit 6 y versiones anteriores.
Robson

Respuestas:

73

La documentación de PHPUnit dice que solía decir para incluir / requerir PHPUnit / Framework.php, de la siguiente manera:

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

ACTUALIZAR

A partir de PHPUnit 3.5, hay una clase de autocargador integrada que se encargará de esto por usted:

require_once 'PHPUnit/Autoload.php';

¡Gracias a Phoenix por señalar esto!

define
fuente
14
PHPUnit 3.5 viene con su propio cargador automático que puede ayudar a simplificar las cosas: require_once 'PHPUnit/Autoload.php'
1
Estoy de acuerdo en que require_once ('PHPUnit / Autoload.php') es la mejor práctica.
Paul Maidment
1
No tengo ambas PHPUnit/Autoload.phpy PHPUnit/Framework/TestCase.phpmi carpeta es comoPHPUnit/Framework/MockObject
Sufendy
44
y ahora tengo PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Dennis
1
vea la respuesta de @ shadi para PHP 6+ stackoverflow.com/a/42561590/2883328
Dennis
237

Para aquellos que llegan aquí después de actualizar phpunit a la versión 6 o superior lanzada el 2017-02-03 (por ejemplo, con el compositor), es posible que obtenga este error porque el código phpunit ahora tiene un espacio de nombres (consulte el registro de cambios ).

Tendrá que refactorizar cosas como \PHPUnit_Framework_TestCasea\PHPUnit\Framework\TestCase

Shadi
fuente
44
Gracias, tuve este problema debido a que Travis CI usaba la versión PHPUnit más reciente en sus compilaciones PHP 7. Mi solución fue descargar manualmente un viejo phar y usarlo en su lugar.
DisgruntledGoat
2
github.com/sebastianbergmann/phpunit/wiki/… está en la parte superior de las notas de lanzamiento, pero me lo perdí
Qchmqs
Gracias amablemente, buen señor. De hecho, estoy llegando aquí después de actualizar a la versión 6.
h4ckNinja
Estaba realmente molesto porque mis pruebas de repente dejaron de funcionar. Hice una actualización del compositor y actualicé mi PHPunit a 6.1. Gracias.
Jed Lynch
38

Para una versión superior de phpunit como 6.4 Debe usar el espacio de nombres PHPUnit \ Framework \ TestCase

use TestCase en su lugar PHPUnit_Framework_TestCase

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

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

}
Jijesh Cherrai
fuente
Excelente, esto funcionó para mí, ya que estaba siguiendo un antiguo tutorial
acabas de copiar la respuesta de shadi
Adam
@ Adam, ¿quién es Shadi?
Jijesh Cherrai
No se tal cosa.
Obtuve el
13

Puede recibir este error porque espació el nombre del archivo. Si es así, deberá especificar que PHPUnit_Framework_TestCase está en el espacio de nombres global precediéndolo con una barra diagonal inversa:

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

Envié un PR crudo para comenzar una conversación para corregir la documentación .

Bevan
fuente
1
Sí, si hizo esto: class YourNiceTest extends PHPUnit_Framework_TestCasesimplemente agregue el \ delante de la clase extendida, como en class YourNiceTest extends \PHPUnit_Framework_TestCase- Esto funcionó para mí, usando Symfony 2.8e incluyendo el phpunitarchivo del compositor descargado como una dependencia local con"phpunit/phpunit": "^4.8"
Xavi Montero
12

Estaba ejecutando pruebas PHPUnit en PHP5, y luego, también necesitaba admitir PHP7. Esto es lo que hice:

En composer.json:

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

En mi archivo de arranque PHPUnit (en mi 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');

En otras palabras, esto funcionará para las pruebas escritas originalmente para PHPUnit 4 o 5, pero luego también tenía que funcionar en PHPUnit 6.

Nino Škopac
fuente
1
esta solución es importante si no desea tocar el código Civi \ Test pero necesita compatibilidad con la última prueba de unidad de php basada en el espacio de nombres
Shahadat Hossain Khan
6

Simplemente puede instalar PHPUnit para ejecutar comandos ( 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

Ejecutar prueba única

Y luego ejecuta la prueba PHPunit:

phpunit test.php

El contenido del archivo de prueba es el siguiente:

<?php

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

    public function testSave()
    {

    }
}

Ejecutar suite de prueba

Configuración del conjunto de pruebas: demosuite.xml. demoes el directorio que contiene todas las pruebas. Los archivos de prueba deben nombrarse como *_test.php( suffix).

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

El conjunto de pruebas se ejecuta con los siguientes comandos:

phpunit -c demosuite.xml --testsuite DemoTestSuite
radeklos
fuente
3
Esto ya no funciona porque las últimas PHPUnit ya no admiten nombres de clase antiguos como PHPUnit_Framework_TestCase. Realmente tienes que usar... extends PHPUnit\Framework\TestCase
Mikko Rantalainen
Simplemente decir que tuve que primero mv phpunit /usr/local/bin/phpunity después sudo chmod +x /usr/local/bin/phpunit. Establecer el archivo como ejecutable antes de moverlo nunca funcionó en Vagrant Ubuntu. No tengo idea de por qué ... Pero en caso de que alguien esté luchando con esto, espero que esto ayude.
George Mylonas
4

Suposición:

Phpunit (3.7) está disponible en el entorno de la consola.

Acción:

Ingrese el siguiente comando en la consola:

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

Comentarios:

No necesita incluir nada en las nuevas versiones de PHPUnit a menos que no quiera ejecutarlo en la consola. Por ejemplo, ejecutar pruebas en el navegador.

svirk
fuente
1

Uso ZF2 y trabajo para mí cuando reemplacé 'PHPUnit_Framework_TestCase' por '\ PHPUnit \ Framework \ TestCase'

Alysson Vicuña de Oliveira
fuente
0

Si tiene Centos u otra distribución de Linux, debe instalar el paquete phpunit, lo hice con yum install phpunit y funcionó. Tal vez pueda tener que agregar un repositorio, pero creo que tiene que funcionar sin problemas con los predeterminados (tengo CentOS 7)

Ricardo Herrero
fuente
0

Es muy posible que esté ejecutando pruebas principales de WordPress y que haya actualizado recientemente su PhpUnit a la versión 6. Si ese es el caso, entonces el cambio reciente al espacio de nombres en PhpUnit habrá roto su código.

Afortunadamente, hay un parche para las pruebas principales en https://core.trac.wordpress.org/changeset/40547 que solucionará el problema. También incluye cambios en travis.yml, que puede que no tenga en su configuración; Si ese es el caso, deberá editar el archivo .diff para ignorar el parche de Travis.

  1. Descargue el parche "Unified Diff" desde la parte inferior de https://core.trac.wordpress.org/changeset/40547
  2. Edite el archivo de parche para eliminar la parte de Travis del parche si no lo necesita. Eliminar desde la parte superior del archivo hasta justo encima de esta línea:

    Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
  3. Guarde el diff en el directorio arriba de su directorio / include /, en mi caso este fue el directorio de Wordpress en sí

  4. Use la herramienta de parche Unix para parchear los archivos. También deberá quitar las primeras barras para pasar de una estructura de directorio absoluta a una relativa. Como puede ver en el punto 3 anterior, hay cinco barras antes del directorio de inclusión, del cual se eliminará un indicador -p5.

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

Después de hacer esto, mis pruebas volvieron a funcionar correctamente.

piersb
fuente
0

AVISO: Comando php bin/console generate:doctrine:crudtambién crean TestControlleren src/Testslo que puede tirar de error cuando intentaba iniciar el servidor si no se tiene UnitTests. Elimina el archivo ¡arréglalo!

MorganFreeFarm
fuente
0

Para mí fue porque corrí

$ phpunit .

en vez de

$ phpunit

cuando ya tenía un phpunit.xmlarchivo configurado en el directorio de trabajo.

ciberbit
fuente
0

Estoy usando php 5.6 en la ventana 10 con la versión zend 1.12 para mí agregando

require_once 'PHPUnit / Autoload.php';

antes de

clase abstracta Zend_Test_PHPUnit_ControllerTestCase extiende PHPUnit_Framework_TestCase

trabajó. Necesitamos agregar esta declaración anterior en el archivo ControllerTestCase.php

Shankar
fuente