2011-08-04 27 views
13

Estoy tratando de escribir pruebas unitarias para una aplicación donde no es posible realizar muchos cambios de código. Casi todos los archivos .php en la base de código utiliza algunas variables $ _SERVER [ ''] como

require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php'; 

Así que ahora cuando tengo que escribir y ejecutar los casos de prueba PHPUnit tengo que configurar de alguna manera estas variables. En la actualidad estoy fijando estas variables en el entorno del usuario y luego hacer

$_SERVER['DOCUMENT_ROOT'] = getenv('DOCUMENT_ROOT'); 
require_once $_SERVER['DOCUMENT_ROOT'] . '/mainApi.php'; 

Conseguir las variables de servidor como esto está funcionando bien. Ejecuto mis pruebas a través de la línea de comandos como $ phpunit test.php.

Ques1: ¿Es posible establecer las variables $ _SERVER mientras se ejecutan las pruebas de phpunit a través de la línea de comandos?

También tengo que ejecutar estas pruebas unitarias a través de Jenkins y no puedo establecer estas variables de servidor a través de archivo ANT/compilación.

Ques2: ¿Es posible establecer estas variables a través del archivo de compilación de hormigas en Jenkins o ejecutando cualquier script de shell antes de ejecutar las pruebas de phpunit a través de Jenkins?

He intentado exportar la variable de servidor a través de un script de shell

export DOCUMENT_ROOT=/server/path-to-root-dir 

y llamar a esa secuencia de comandos en el build.xml en Jenkins

<export name="setEnv" description="set server var"> 
    <exec executable="sh"> 
     <arg value = "sumit.sh" /> 
    </exec> 
</target> 

pero no su trabajo. ¿Hay algún ajuste que pueda hacer para esto? Gracias!

Respuesta

6

No estoy seguro acerca del # 1, pero PHPUnit debería soportarlo. No veo ninguna forma de hacerlo a través de la línea de comando. Sin embargo, si coloca su solución actual en bootstrap.php, no tiene que hacerlo en cada prueba.

Para # 2, <exec> le permite establecer variables de entorno utilizando elementos anidados <env>. Yo uso esto en Jenkins.

<exec executable="phpunit" ...> 
    <env key="DOCUMENT_ROOT" value="/var/www/php"/> 
</exec> 

Actualización: Por lo general, crear bootstrap.php de configurar añadir el directorio de origen a la ruta de inclusión e inicializar el entorno de prueba sin embargo es necesario. Este archivo no es proporcionado por PHPUnit - a diferencia de phpunit.xml.

Lo coloco en el mismo directorio que phpunit.xml, pero eso se debe a que tengo un archivo separado para cada proyecto. Va en el directorio que contiene sus pruebas típicamente. Esto le permite ejecutar phpunit desde la línea de comandos sin indicarle cómo encontrar esos archivos de configuración. De lo contrario, debe usar --bootstrap y/o --configuration para señalarlos.

Aquí es cómo estructurar un proyecto típico:

<project-root>/ 
    build.xml 
    src/ 
     MyClass.php 
    test/ 
     MyClassTest.php 
     phpunit.xml 
     bootstrap.php 
+0

podemos establecer '$ _SERVER [ 'DOCUMENT_ROOT']' directamente a través de fichero de construcción?Su método '' funciona perfectamente bien, pero tengo tantas variables SERVER en mi código que tendré que escribir todo el '$ _SERVER [] = getenv()' en un archivo php y tendrá que importar ese archivo en todas las clases de prueba. ¿Hay alguna manera de que podamos reducirlo? – Sumitk

+0

@Sumitk - Puede hacer las asignaciones en 'bootstrap.php' que PHPUnit carga automáticamente antes de ejecutar cualquier prueba. Coloque el archivo en el directorio en la raíz de sus pruebas o señale PHPUnit utilizando el argumento '--bootstrap' de la línea de comandos. –

+0

¿Es este 'bootstrap.php' un archivo que creamos junto con los archivos de prueba o viene con PHPUnit? Porque no puedo verlo en mi sistema. Además, si lo creamos, ¿dónde debería ubicarlo? con todos los archivos de prueba o con 'phpunit.xml.dist '? – Sumitk

Cuestiones relacionadas