2010-10-28 12 views
26

Según lo que he leído, parece que debería poder configurar una carpeta, p. Ej. prueba /, coloca algunos archivos en ella con las clases de prueba unitarias, y luego ejecuta phpunit en ese archivo y hace que encuentre y ejecute las pruebas.¿Cómo puedo obtener phpunit para ejecutar pruebas de todos los archivos en una carpeta?

Por alguna razón, en la instalación (en OS X), se piensa en las pruebas de carpetas/es un archivo, o por lo que parece:

$ ls tests 
test1.php test2.php 
$ phpunit tests/test1.php 
PHPUnit 3.5.3 by Sebastian Bergmann. 

F 

Time: 0 seconds, Memory: 5.00Mb 

There was 1 failure: 

1) FailingTest::testFail 
Your test successfully failed! 

/Users/****/tmp/tests/test1.php:4 

FAILURES! 
Tests: 1, Assertions: 0, Failures: 1. 
$ phpunit tests/test2.php 
PHPUnit 3.5.3 by Sebastian Bergmann. 

. 

Time: 0 seconds, Memory: 5.00Mb 

OK (1 test, 1 assertion) 
$ phpunit tests 
PHP Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102 
Stack trace: 
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '') 
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true) 
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main() 
#3 {main} 
    thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102 

Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102 
Stack trace: 
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '') 
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true) 
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main() 
#3 {main} 
    thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102 

Tengo lo que espero es una instalación bastante estándar de phpunit a través de PEAR, siguiendo estas instrucciones http://www.newmediacampaigns.com/page/install-pear-phpunit-xdebug-on-macosx-snow-leopard, en OS X Snow Leopard.

$ pear version 
PEAR Version: 1.9.1 
PHP Version: 5.3.2 
Zend Engine Version: 2.3.0 
Running on: **** 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386 
$ phpunit --version 
PHPUnit 3.5.3 by Sebastian Bergmann. 

Estoy esperando que alguien más por ahí se encontró con este problema y es sólo una solución simple, o de lo contrario sólo estoy haciendo algo mal?

+1

Gracias , pero lo descubrí (ver mi respuesta). Como me vinculó al rastreador de problemas, voy a presentar un ticket para ver si actualizarán su documentación. – jsdalton

Respuesta

52

No es un error, es una característica.

tiene un directorio completo de archivos .php, en su caso, todos ellos contienen casos de prueba.

Pero a medida que crece su banco de pruebas, es probable que desee tener otros archivos php dentro de las pruebas de directorios, los archivos que no lo hacen, contiene pruebas que existen solamente para soportar las pruebas. Esos archivos nunca deberían ser ejecutados por PHPUnit.

Este es un escenario muy común.

Entonces, ¿cómo sería PHPUnit saber qué ficheros que necesita para funcionar y cuáles no? Comprobación del nombre del archivo sufijo es una opción para hacerlo - por defecto PHPUnit considera todo con nombre que termina con Test.php como una prueba y hace caso omiso de todo lo demás.

Puede cambiar ese comportamiento si realmente quiere - mediante la creación de un llamado phpunit.xml archivo en el directorio de pruebas con el siguiente contenido

<?xml version="1.0" encoding="utf-8" ?> 
<phpunit> 
<testsuite name='Name your suite'> 
    <directory suffix='.php'>./</directory> 
</testsuite> 
</phpunit> 

Una vez que haya hecho eso, PHPUnit se ejecutará con todos los archivos '.php' al final del nombre de archivo (en este contexto, la extensión de archivo se considera parte del nombre del archivo)

Pero realmente es mejor acostumbrarse a la convención y nombrar sus pruebas en consecuencia.

+5

De acuerdo. No creo que el comportamiento de phpunit fuera incorrecto, es solo que este requerimiento no estaba explícito en la documentación en ninguna parte, y así fui absorbido por un agujero de conejo tratando de resolver esto por alrededor de una hora. Sin embargo, archivé un ticket y el responsable ya ha enviado un parche a la documentación que lo aclara. – jsdalton

+0

Genial, las mejoras de documentación siempre son útiles :) –

19

poco molesto capricho, pero lo he descubierto.

Al menos con la configuración predeterminada, archivos de prueba tiene que terminar con "Test.php", por ejemplo. fooTest.php, o el corrector de pruebas no los encuentra.

+5

esto debe escribirse en negrita y rojo en el manual de PhpUnit – hkarask

+2

Puede no estar en negrita, pero es el primer punto de la primera prueba de ejemplo en los documentos. "1. Las pruebas para una clase de clase van a una clase ClassTest". http://phpunit.de/manual/current/en/phpunit-book.html#writing-tests-for-phpunit –

17

La manera más sencilla de ejecutar la prueba en la carpeta es añadir "Test.php" al final todas las pruebas y ejecutar PHPUnit especificando su carpeta como esta

phpunit . 

o

phpunit your_test_folder/. 
+1

si no desea que su nombre de archivo termine con 'Test.php' en la carpeta, puede ejecutarlo con' --test-sufijo = anything.php' para anularlo. – checksum

Cuestiones relacionadas