Domanda

Siamo passati a JUnit 4 e alla formica 1.7

I test vengono eseguiti correttamente in Eclipse, ma le annotazioni vengono ignorate quando si eseguono i test utilizzando ant.

Secondo l'attività Ant junit documentazione :

  

Funziona anche con JUnit 4.0, incluso " puro " Test di JUnit 4 utilizzando solo annotazioni e nessun JUnit4TestAdapter.

Ma la documentazione non spiega come dovrebbe essere configurata.

C'è qualche impostazione speciale richiesta per l'attività junit? Mi sto perdendo qualcosa? Abbiamo entrambi i test che estendono TestCase (ovvero 3,8 stile) e "puro". Junit 4 test, potrebbe essere questo il problema?

È stato utile?

Soluzione

Sto usando i test JUnit4 puri con Ant.

Ecco la parte interessante del mio file di build:

<junit printsummary="yes" haltonfailure="yes">
    <formatter type="xml"/>
    <classpath refid="path.test"/>
    <batchtest fork="yes" todir="${dir.report.unittests.xml}">
        <fileset dir="src">
            <include name="**/*Test*.java"/>
        </fileset>
    </batchtest>
</junit>

Assicurati di avere l'ultima versione del file junit.jar nella directory lib di Ant. Per quanto ne so, la versione richiesta viene fornita con ant 1.7 o versioni successive ...

Altri suggerimenti

La formica viene fornita con una versione di JUnit 3 per impostazione predefinita. JUnit 3 non supporta le annotazioni di prova.

Per utilizzare le annotazioni JUnit 4 dall'attività junit, assicurarsi di fornire la posizione di un vaso JUnit 4 in un elemento npath classpath dell'attività junit (vedere questa voce nelle FAQ sulla formica ).

<junit showoutput="yes" fork="true">
    <classpath>
        <!-- The location of the JUnit version that you want to use -->
        <pathelement location="lib/junit-4.9b1.jar"/>
    </classpath>

    <formatter type="plain" usefile="false" />

    <batchtest>
        <fileset dir="${tests.dir}"/>
    </batchtest>
</junit>

Questa è una soluzione preferibile per sovrascrivere ant-junit.jar in ANT_HOME / lib in quanto significa che puoi mantenere il tuo jar JUnit nel controllo del codice sorgente insieme al tuo codice per effettuare aggiornamenti alle versioni successive in modo semplice.

Nota che, sebbene non abbia specificato alcun modello di inclusione nel mio set di file sopra, ciò significa che l'attività junit tenterà di eseguire JUnit contro tutte le classi in quella struttura di directory che potrebbe comportare l'inclusione di un certo numero di classi che don non contiene alcun test a seconda di come hai strutturato i tuoi file sorgente.

Alla fine puoi trovare ed eseguire i test solo con il parametro skipNonTests aggiunto in ant 1.9.3+!

Questo è lo snippet di codice dalla risposta accettata sopra (tranne per il nuovo parametro skipNonTests e per eliminare il "Test" nel requisito del nome file):

<junit printsummary="yes" haltonfailure="yes">
    <formatter type="xml"/>
    <classpath refid="path.test"/>
    <batchtest skipNonTests="true" fork="yes" todir="${dir.report.unittests.xml}">
        <fileset dir="src">
            <include name="**/*.java"/>
        </fileset>
    </batchtest>
</junit>

Questo è successo a me ed è stato perché stavo usando entrambe le annotazioni ed estendendo TestCase.

public class TestXXX extends TestCase {

    @Test
    public void testSimpleValidCase() {
        // this was running
    }

    @Test
    public void simpleValidCase() {
        // this wasn't running
    }
}

Quando estendi TestCase stai assumendo lo stile JUnit3, quindi le annotazioni JUnit4 vengono ignorate.

La soluzione è smettere di estendere TestCase.

Verifica la definizione del tuo percorso di classe ... questo ha risolto il mio problema.

<path id="classpath" description="Classpath do Projeto">
    <fileset dir="${LIB}">
        <include name="**/*.jar" />
        <exclude name="**/.SVN/*.*"/>
    </fileset>
</path>

Questa è la parte rilevante del mio script di formica generico ... non sono sicuro che ti possa aiutare o meno ..

 <junit fork="true"
        forkmode="once"
        haltonfailure="false"
        haltonerror="false"
        failureproperty="tests.failures"
        errorproperty="tests.errors"
        includeantruntime="true"
        showoutput="true"
        printsummary="true">
     <classpath>
         <path refid="path-id.test.classpath.run"/>
     </classpath>

     <formatter type="xml"/>

     <batchtest fork="yes"
                todir="${dir.build.testresults}">
         <fileset dir="${dir.src.tests}">
             <include name="**/*Test.java"/>
         </fileset>
     </batchtest>
 </junit>

Applica questa annotazione alle altre classi org.junit.Ignore

Ho anche provato a fare test con JUnit 4.0 senza JUnit4TestAdapter, ovvero senza metodo
    public static junit.framework.Test suite () {         restituisce il nuovo JUnit4TestAdapter (SomeTestClass.class);     }

Uso la formica 1.9.4. L'esecuzione di test verbose (ant -v) mostra

  

[junit] Esecuzione di più test nella stessa macchina virtuale
    [junit] Aggiunta implicita /usr/share/java/junit.jar:/usr/sharejava/ant-launcher.jar:/usr/share/java/ant.jar:/usr/share/java/ant/ant-junit .jar a CLASSPATH

Ah, ma c'è ancora qualche compito ant-junit. Il download di questo mostra inoltre /usr/share/java/ant/ant-junit4.jar che non viene aggiunto implicitamente. L'ho appena aggiunto esplicitamente:

<junit printsummary="yes" 
    fork="yes" 
    forkmode="once"
    maxmemory="1023m" 
    showoutput="no">
    ...
   <classpath>
     <pathelement path="...:${junitJar}:${hamcrestJar}:/usr/share/java/ant/ant-junit4.jar" />
   </classpath>
...
</junit>

e ha funzionato. Senza: no. Sono consapevole che questa soluzione non è affatto bella ...

Quello che ho finito per fare è stato aggiungere una formica a una delle mie definizioni che viene utilizzata dall'attività > ;. Et voilà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top