2010-10-27 17 views
20

Io corro JUnit tramite Ant utilizzando un qualcosa di destinazione del genere:Come posso avere il compito Ant JUnit eseguire tutti i test e poi fermare il resto della costruzione eventuale test è fallito

<target name="junit" depends="compile"> 
    <mkdir dir="${report.dir}"/> 
    <junit printsummary="yes" haltonfailure="yes" showoutput="yes" > 
     <classpath> 
      <path refid="classpath"/> 
      <path location="${classes.dir}"/> 
     </classpath> 
     <formatter type="brief" usefile="false"/> 
     <formatter type="xml"/> 

     <batchtest fork="yes" todir="${report.dir}"> 
      <fileset dir="${src.dir}" includes="**/*Tests.java" /> 
     </batchtest> 
    </junit> 
</target> 

ho una classe come questa:

public class UserTests extends TestCase { 

    public void testWillAlwaysFail() { 
     fail("An error message"); 
    } 
    public void testWillAlwaysFail2() { 
     fail("An error message2"); 
    } 
} 

haltonfailure="yes" sembra causare l'accumulo di fermare al più presto ogni singolo test è fallito, la registrazione solo il primo test fallito. Impostandolo su "off", l'intera build avrà esito positivo (anche se i messaggi di errore di test vengono scritti sull'output).

Cosa voglio che venga eseguito per tutti i test (anche se uno non è riuscito), quindi la build deve essere arrestata se qualche test ha avuto esito negativo.

È possibile farlo?

risposta

39

È possibile impostare l'attributo failureproperty del compito junit, quindi verificare la proprietà in seguito con il compito fail:

<junit haltonfailure="no" failureproperty="test.failed" ... > 
    ... 
</junit> 
<fail message="Test failure detected, check test results." if="test.failed" /> 
+0

che abbia senso. Grazie. –