2008-09-15 18 views
13

Soy un programador de Java desde hace mucho tiempo que trabaja en un proyecto de PHP, y estoy tratando de poner en funcionamiento PHPUnit. Cuando las pruebas unitarias en Java, es común poner clases de casos de prueba y clases regulares en directorios separados, como esto -¿Disposición del directorio para las pruebas de PHPUnit?

/src 
    MyClass.java 

/test 
    MyClassTest.java 

y así sucesivamente.

Cuando se prueban unidades con PHPUnit, ¿es común seguir la misma estructura de directorios, o existe una mejor manera de diseñar clases de prueba? Hasta ahora, la única manera en que puedo obtener la instrucción "include (" MyClass.php ")" para que funcione correctamente es incluir la clase de prueba en el mismo directorio, pero no quiero incluir las clases de prueba cuando presiono para producción.

+1

Referencia cruzada: [mejores prácticas de PHPUnit para organizar pruebas (noviembre de 2011)] (http://stackoverflow.com/q/8313283/367456) – hakre

Respuesta

9

Creo que es una buena idea mantener sus archivos separados. Normalmente uso una estructura de carpetas como esto:

/myapp/src/  <- my classes 
/myapp/tests/  <- my tests for the classes 
/myapp/public/  <- document root 

En su caso, para la inclusión de la clase en el archivo de prueba, por qué no sólo tiene que pasar toda la ruta al método incluyen?

include('/path/to/myapp/src/MyClass.php'); 

o

include('../src/MyClass.php'); 
4

Necesita modificar el include_path de PHP para que sepa dónde encontrar MyClass.php cuando lo haga include() en su unidad de prueba.

Usted podría tener algo como esto en la parte superior de su archivo de prueba (anterior a las necesidades de inclusión):

 

set_include_path(get_include_path() . PATH_SEPARATOR . "../src"); 
 

Este anexa su directorio src en la ruta de inclusión y deberían permitirle mantener su código real separada de tu código de prueba

1

puse mis casos de prueba al lado de la fuente en un archivo con el mismo nombre pero con una extensión .phpt. La secuencia de comandos de implementación simplemente filtra * .phpt cuando ingresan a la producción.

2

La respuesta de Brian Phillips no va lo suficientemente lejos, en mi experiencia. No sabe cuál es el directorio actual cuando PHPUnit ejecuta sus pruebas. Por lo tanto, debe hacer referencia a la ruta absoluta del archivo de clase de prueba en su expresión set_include_path(). De esta manera:

set_include_path(get_include_path() . PATH_SEPARATOR . 
         dirname(__FILE__) . "/../src"); 

Este fragmento se puede colocar en su propia SetupIncludePath.php archivo de cabecera y se incluyen en los archivos de prueba con un 'require_once', de modo que los conjuntos de pruebas no anexar el camino varias veces.

Cuestiones relacionadas