2011-01-17 16 views
13

Ho un progetto Java con alcuni test di unità scritti utilizzando JUnit. Recentemente sono stati aggiunti alcuni nuovi test unitari scritti in groovy (anche usando JUnit) in quanto è più facile rendere questi piùpiù espressivi e generalmente più facili da leggere. Ci consente anche di usare il framework Spock.Esecuzione di test di unità groovy in form per un progetto java

Il progetto è stato creato e testato con ant.

unit test Prima sono state aggiunte le classi Groovy sono stati eseguiti utilizzando il seguente compito formica:

<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> 

Tuttavia, questo approccio non funziona per le prove groove come quelli sono in *.groovy file e la JUnit Ant task, comprensibilmente , non li riconosce nello fileset.

L'approccio alternativo è quello di utilizzare i file *.class per la batchtestfileset in questo modo:

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

Questo genera falsi negativi come file di classe di chiusura sono inclusi anche così una possibile soluzione è quella di escludere questi file.

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

C'è un modo migliore per identificare classi di test JUnit FO il formica compito? Forse uno basato sulla riflessione e l'attributo @Test come elencare manualmente tutte le classi di test (che funzionerebbero perfettamente) non è in realtà una soluzione gestibile. Qualcosa come il SpecClassFileSelector dal Spock framework.

risposta

0

Date un'occhiata a:

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

C'è un taskdef formica groovyc per la compilazione dei casi di test Groovy e li esegue. L'esempio è Maven, ma non dovrebbe essere troppo difficile adattarlo per fare ciò che vuoi.

+0

Grazie. Ho visto questa pagina prima di scrivere la domanda. Le mie due soluzioni proposte fanno effettivamente quello che fa la soluzione Maven: guarda il classpath. – mfloryan

-1

Non puoi scrivere qualcosa del genere?

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

No, perché non funziona. In base alla documentazione dell'attività formica JUnit: batchtest raccoglie le risorse incluse da qualsiasi numero di raccolte di risorse nidificate. Quindi genera un nome di classe di test per ogni risorsa che termina in .java o .class – mfloryan

+1

Ultimamente ho utilizzato Gradle. Dovresti davvero dargli un'occhiata, è molto più facile e flessibile di Ant, e soprattutto di Maven.Il plugin Groovy ti permette di costruire progetti con classi Java e Groovy, oltre a testare Groovy e Java. – Chochos

3

quello di cambiare il modello di inclusione per *Test piuttosto che *Test* come @ jon-skeet suggerito here.

In questo modo non corrisponderà alle classi di chiusura anonime.

dovrai rinominare le classi esistenti e chiedere agli sviluppatori di seguire questo schema.

Problemi correlati