2010-12-06 11 views
5

Tengo un archivo ant que ejecuta pruebas JUnits. Estas pruebas se basan en una ruta relativa a ciertos archivos de configuración. Intenté establecer el directorio de trabajo para la prueba por lotes, pero fallaba.Cambiar el directorio de trabajo en la tarea junit

Quiero que el directorio de trabajo a ser ${plugins.dir}/${name}

La parte JUnit del guión hormiga:

<junit haltonfailure="no" printsummary="on" fork="true" showoutput="true" dir="${plugins.dir}/${name}"> 
    <jvmarg value="-Duser.dir=${plugins.dir}/${name}"/> 
    <classpath> 
     <path refid="project.classpath"/> 
     <pathelement location="${plugins.dir}/${dependency}/@dot/"/> 
     <pathelement location="${plugins.dir}/${name}/" /> 
    </classpath> 
    <formatter type="xml" /> 
    <sysproperty key="basedir" value="${plugins.dir}/${name}"/> 
    <sysproperty key="dir" value="${plugins.dir}/${name}"/> 
    <batchtest todir="${junit.output}"> 
     <fileset dir="${dir}"> 
      <include name="**\*AllTests.class" /> 
     </fileset> 
    </batchtest> 
</junit> 

He buscado en Google y busqué pero las soluciones que he encontrado han sido para establecer el " dir "," sysproperty "o" jvmarg ". Como puede ver, los he probado todos :)

¿Hay alguna forma de imprimir el directorio actual en la etiqueta? No es compatible. Eso me permitiría verificar si el directorio está realmente cambiado y a qué.

Un comodín en esta ecuación es que esto se está ejecutando en Hudson que inicia un proceso de eclipse que inicia a un corredor. Esto es para que podamos ejecutar las pruebas junit junit y eclipse junit. No debería tener nada que ver con el problema, creo.

+3

¿No es posible simplemente arreglar sus pruebas, que son autónomos? P.ej. Si los recursos que necesita se colocan en algún lugar en el classpath en su lugar, puede cargarlos a través de 'getClass(). getResource (String)' en su lugar. –

+0

@Mark peters, sí, eso es posible. Pero eso implica la actualización de unas 400-500 pruebas, por lo que preferiría considerar ese plan B. – Fredrik

Respuesta

5

Creo que tiene razón al establecer la propiedad basedir (consulte projects attributes). Sin embargo, dado que es una propiedad de ANT (y no de la JVM), ¡SÓLO ES LEÍDO!

¿Tiene efecto otro objetivo si configuras la baseir cuando llamas a tu tarea ant? Ver Command Line reference.

ant -Dbasedir=somedir 

O bien, expande un nuevo proceso de hormiga para llamar a tu objetivo de junit. Consulte AntCall task o Ant task. Los siguientes ejemplos asumen que el objetivo junit contiene su tarea junit. He utilizado esta tarea para otras propiedades (no se necesita la propiedad basedir hasta ahora.

<antcall target="junit"> 
    <param name="basedir" value="${plugins.dir}/${name}"/> 
</antcall> 

<ant dir="${plugins.dir}/${name}" target="junit" /> 
+0

Gracias. Todavía no tengo tiempo para probar esto, pero parece que resolverá al menos algunos de mis problemas, así que estoy marcando esto como la respuesta. – Fredrik

5

que tenían el mismo escenario y en mi caso vi que dir="...." se ignora si se ejecuta en la misma JVM por lo que simplemente añadido fork='true' y trabajado

Presupuesto de sitio de la documentación de Apache. "dir -.. el directorio en el que para invocar la máquina virtual ignora si tenedor está desactivado"... Más here

+0

y no te olvides de usar fork = "true" también en la parte del batchtest, ya que sobrescribe la propiedad de la bifurcación de los junits. Eso hizo el truco para mí. – dag

1

estoy usando NetBeans cuando agrego a Propiedades de Ant (desde Herramientas, Opciones, Java, Ant) work.dir=C:/MyWorkingDir/ ejecuta ant con el siguiente comando y cambia el funcionamiento dir para C:\MyWorkingDir:

ant -f D:\\workspace\\lib\\project -Dfork=true -Djavac.includes=com/myapp/MyTest.java -Dtest.includes=com/myapp/MyTest.java "-Dwork.dir=C:/MyWorkingDir/" test-single 
Cuestiones relacionadas