2011-01-17 9 views
13

Tengo un proyecto de Java con algunas pruebas de unidad escritas usando JUnit. Recientemente se han agregado algunas pruebas de unidades nuevas que están escritas en groovy (también utilizando JUnit) ya que es más fácil hacer que esas sean más expresivas y generalmente más fáciles de leer. También nos permite usar el marco spock.Ejecutando pruebas de unidad groovy en ant para un proyecto de Java

El proyecto está construido y probado con ant.

pruebas unitarias antes de añadir las clases maravilloso se llevaron a cabo mediante las siguientes tareas ant:

<target name="test" depends="test-compile"> 
    <junit printsummary="yes"> 
     <classpath> 
      <path refid="test.classpath"/> 
     </classpath> 
     <formatter type="plain"/> 
     <batchtest fork="yes" todir="${test.dir}/report"> 
      <fileset dir="${test.dir}/unit" includes="**/*.java"/> 
     </batchtest> 
    </junit> 
</target> 

Sin embargo, este enfoque no funciona para pruebas maravillosos como los que están en *.groovy archivos y la JUnit Ant task, comprensiblemente , no los reconoce en el fileset.

El enfoque alternativo es utilizar *.class archivos para el batchtestfileset así:

<batchtest fork="yes" todir="${test.dir}/report"> 
    <fileset dir="${test.dir}/${build.dir}"> 
     <include name="**/*Test*.class" /> 
    </fileset> 
</batchtest> 

Esto genera falsos negativos como archivos de clase cierre también están incluidos por lo que una posible solución es excluir esos archivos.

<batchtest fork="yes" todir="${test.dir}/report"> 
    <fileset dir="${test.dir}/${build.dir}"> 
     <include name="**/*Test*.class" /> 
     <exclude name="**/*$*.class" /> 
    </fileset> 
</batchtest> 

¿Hay una mejor manera de identificar las clases de prueba FO el junit hormiga tarea? Quizás uno basado en la reflexión y el atributo @Test como una lista manual de todas las clases de prueba (que funcionaría perfectamente) no es realmente una solución sostenible. Algo así como SpecClassFileSelector del Spock framework.

Respuesta

0

Tome un vistazo a:

http://www.ibm.com/developerworks/java/library/j-pg11094/

Hay una hormiga taskdef groovyc para compilar los casos de prueba maravilloso y ejecutarlos. El ejemplo es Maven, pero no debería ser demasiado difícil adaptarlo para hacer lo que quieras.

+0

Gracias. He visto esta página antes de escribir la pregunta. Mis dos soluciones propuestas realmente hacen lo que hace la solución maven: mirar el classpath. – mfloryan

-1

¿No puedes escribir algo como esto?

 <fileset dir="${test.dir}/unit" includes="**/*.java,**/*.groovy"/> 
+1

No, porque no funciona. De acuerdo con la documentación de la tarea JUnit ant: batchtest recoge los recursos incluidos de cualquier cantidad de colecciones de recursos anidados. Luego genera un nombre de clase de prueba para cada recurso que termina en .java o .class – mfloryan

+1

Últimamente he estado usando Gradle. Deberías echarle un vistazo, es mucho más fácil y flexible que Ant, y especialmente que Maven. – Chochos

3

lo que trata de cambiar el patrón de incluir a *Test en lugar de *Test* como @ Jon-skeet sugirió here.

De esta manera no coincidirá con las clases de cierre anónimo.

tendrás que cambiar el nombre de tus clases existentes y pedir a los desarrolladores que sigan este patrón.

Cuestiones relacionadas