unitarias unit test run que pruebas make example ejecutar php unit-testing phpunit

test - Diseño del directorio para las pruebas PHPUnit?



que es phpunit (4)

Soy un programador de Java desde hace mucho tiempo que trabaja en un proyecto PHP, y estoy tratando de poner en funcionamiento PHPUnit. Cuando se realizan pruebas unitarias en Java, es común colocar clases de casos de prueba y clases regulares en directorios separados, como este:

/src MyClass.java /test MyClassTest.java

y así.

Cuando se realizan pruebas unitarias 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 forma 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.


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

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

En su caso, para incluir la clase en su archivo de prueba, ¿por qué no simplemente pasar el camino completo al método de inclusión?

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

o

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


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

Puede tener algo como esto en la parte superior de su archivo de prueba (que precede a su inclusión):

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

Esto agrega su directorio src en la ruta de inclusión y debe permitirle mantener su código real separado de su código de prueba.


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


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 (). Me gusta esto:

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

Este fragmento puede colocarse en su propio archivo de encabezado SetupIncludePath.php e incluirse en los archivos de prueba con ''require_once'', de modo que los conjuntos de prueba no anexen la ruta varias veces.