2010-11-03 10 views
20

Estoy intentando hacer que PHPUnit funcione en mi entorno de desarrollo, pero me he topado con un obstáculo cuando se trata de incluir PHPUnit en mis scripts. Sé que tengo que establecer la ruta de inclusión en PHP, pero cada combinación que he probado falla sin que el compilador vea la clase PHPUnit_Framework_TestCase.Obtención de funcionamiento de PHPUnit: ¿incluye la ruta de acceso no establecida correctamente?

Acabo de ejecutar actualizaciones en PHP y PEAR y PHPUnit está instalado en la computadora porque puedo acceder a él a través de la línea de comandos muy bien.

PHPUnit se instala en /usr/share/php/PHPUnit

pera es en /usr/share/php/PEAR

¿Hay algo que me falta? Esta es la primera vez que trato de usar PHPUnit o incluso algo de PEAR para el caso. Estoy en Ubuntu 10.10. Cualquier ayuda sería apreciada.

Editar - No hay nada en la ruta de inclusión en mi PHP ini. En este momento el código es sólo

<?php 
class Stacktest extends PHPUnit_Framework_TestCase 
{ 

} 

no tengo idea de qué incluir o qué poner en la ruta de inclusión porque parece que por toda la información en la web sobre PHPUnit, este poco de información es crítico ausente .

+0

¿Puede proporcionarnos más información sobre cómo está tratando de usar PHPUnit en sus scripts? –

+1

¿Cómo está exactamente tratando de ejecutar sus pruebas? ¿Estás usando algo como 'phpunit MyClassTest' in cli? – netcoder

+1

¿Estás diciendo que no puedes incluir TestCase.php? Descubra cuál es su ruta de inclusión haciendo echo get_include_path() – Cobby

Respuesta

16

Si instaló phpunit correctamente (a través de PEAR), entonces no hay necesidad de incluir un archivo; solo necesita cambiar la forma en que lo usa para probar los archivos php (por ejemplo, si lo usa para probar si el archivo funcionó yendo al navegador escriba localhost). Con phpunit puedes usar la línea de comando; chapter 5 da el mismo ejemplo usando la línea de comando (supongo que es un estándar). Así que si lo tienes instalado correctamente, puede hacer esto:

  1. Archivo ExampleTest.php, ubicado en la raíz de localhost (para mí esto es/var/www):

    class ExampleTest extends PHPUnit_Framework_TestCase 
    { 
        public function testOne() 
        { 
         $this->assertTrue(FALSE); 
        } 
    } 
    
  2. abierto una consola (terminal en Mac o Linux, símbolo del sistema en Win), navegue a la raíz de su documento localhost (donde guardó ExampleTest.php) y escriba lo siguiente:

    phpunit --verbose ExampleTest.php 
    
  3. debería ver:

    PHPUnit 3.4.13 by Sebastian Bergmann. 
    
    F 
    
    Time: 1 second, Memory: 6.50Mb 
    
    There was 1 failure: 
    
    1) ExampleTest::testOne 
    Failed asserting that <boolean:false> is true. 
    
    /var/www/ExampleTest.php:6 
    
    FAILURES! 
    Tests: 1, Assertions: 1, Failures: 1. 
    

Notas: Todo lo anterior supone que ha instalado PHPUnit correctamente (como se indica en chapter 3) y reinició apache una vez ese .

si realmente desea ejecutar pruebas en su navegador utilizan el siguiente código

# error reporting 
ini_set('display_errors',1); 
error_reporting(E_ALL|E_STRICT); 

# include TestRunner 
require_once 'PHPUnit/TextUI/TestRunner.php'; 

# our test class 
class ExampleTest extends PHPUnit_Framework_TestCase 
{ 
    public function testOne() 
    { 
     $this->assertTrue(FALSE); 
    } 
} 

# run the test 
$suite = new PHPUnit_Framework_TestSuite('ExampleTest'); 
PHPUnit_TextUI_TestRunner::run($suite); 

Editar

sólo vio Ubuntu 10.10 en su pregunta. Para instalar Ubuntu recomiendo esto: en el terminal de hacer:

sudo pear uninstall phpunit/PHPUnit 
sudo apt-get install phpunit 
sudo /etc/init.d/apache2 restart 

Nota: No emita en la primera línea si no se instala PHPUnit través de pera. La última línea parece ser necesaria (en mi caso al menos).

sudo /etc/init.d/apache2 reload # Or 
sudo service apache2 restart 
+1

Al tratar de ejecutar en el navegador carga correctamente TestRunner.php pero no puede cargar el archivo de la clase padre PHPUnit_Runner_BaseTestRunner. Recibo el siguiente error al ejecutar esto en el navegador: Error fatal: la clase 'PHPUnit_Runner_BaseTestRunner' no se encuentra en /usr/share/php/PHPUnit/TextUI/TestRunner.php en la línea 60 –

+0

primero, ¿cómo instaló phpunit? si peras, quítalo e instálalo a través de apt-get ¡ya no tendrás problemas con los archivos de inclusión! –

+0

segundo si obtiene ese error puede requerir ese archivo también require_once 'PHPUnit/Runner/BaseTestRunner.php'; antes de que se requiera TestRunner.php, pero tengo una gran sensación de fealdad con respecto a tu instalación, así que este podría no ser el último error que ves, es por eso que recomiendo usar apt-get ya que estarás seguro de que funciona. –

2

Asegúrese de que cada vez que utilice include() o require(), prefija el nombre del archivo real con dirname(__FILE__). Esto garantiza que el archivo que está incluyendo se encuentra en la ruta que especifica en relación con el archivo real en el que está incluida la inclusión. Por deftault, PHP incluye el archivo que se invoca para iniciar el programa.

6

añadir esta línea a su php.ini:

include_path=".:/usr/share/php:/usr/share/pear:/usr/share/php/PHPunit:/usr/share/php/PEAR" 

Guarde el archivo y reiniciar Apache.

Además, asegúrese de editar correctamente php.ini. Intenta usar locate php.ini para encontrar todos los lugares que podría estar escondiendo. Por lo general, se encuentra en el directorio /usr.

+1

No es necesario 'localizar' el archivo correcto. Use "php -i" para obtener la configuración completa. Contiene la ruta del archivo de configuración actualmente cargado. O use phpinfo() en un archivo php. –

+0

'php -i | grep php.ini' grep es tu amigo, pero, si usas php de Apache, deberías consultar desde un navegador agregando php_info() y buscando "php.ini". Los archivos de Ubuntu están en/etc/apache2/y hay más archivos en '/ etc/php5/{apache2 | cli | cgi}'. – erm3nda

26

A partir de PHPUnit 3.5, usted tiene que incluir el cargador automático a sí mismo:

require 'PHPUnit/Autoload.php'; // PEAR should be in your include_path 
+0

Esta fue la solución correcta: el autocargador debe incluirse explícitamente. Todavía debe asegurarse de tener las rutas de acceso establecidas en pear y phpunit. –

+6

¿Dónde? En la parte superior de cada archivo de prueba? –

+0

@BSeven, no estoy seguro exactamente de cómo ayudarlo, pero esta respuesta fue lo suficientemente útil como para ayudarme en mi situación. Estoy usando PhpStorm 6, y pude ir a Preferencias (Proyecto)> PHP> PHPUnit, y configurar la biblioteca PHPUnit para 'usar cargador personalizado' y luego establecer la ruta para ser 'vendor/autoload.php de mi proyecto 'archivo. –

0

yo era capaz de conseguir que funcione mediante el uso de set_include_path en la parte superior de mi script (ver ejemplo aquí http://www.siteconsortium.com/h/p1.php?id=php002), y luego también tuve que incluirlo porque estaba realizando una prueba de Selenium, pero funcionó.

require_once ('PHPUnit/Autoload.php'); 
require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; 
Cuestiones relacionadas