2011-09-26 8 views
8

Ho recentemente integrato Cobertura nei miei script di build Ant e mi chiedo se l'ho fatto correttamente perché ha rallentato in modo significativo il tempo necessario per eseguire i test unitari.Unit test slow with Cobertura

Ecco un output di console di esempio:

... 
[junit] Running gov.nyc.doitt.gis.webmap.strategy.markup.ViewportDeterminingMarkupStrategyTest 
[junit] Tests run: 5, Failures: 0, Errors: 0, Time elapsed: 0.38 sec 
[junit] Flushing results... 
[junit] Flushing results done 
[junit] Cobertura: Loaded information on 282 classes. 
[junit] Cobertura: Saved information on 282 classes. 
[junit] Running gov.nyc.doitt.gis.webmap.strategy.markup.VisibleFeatureTypesMarkupInfoTest 
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.434 sec 
[junit] Flushing results... 
[junit] Flushing results done 
[junit] Cobertura: Loaded information on 282 classes. 
[junit] Cobertura: Saved information on 282 classes. 
[junit] Running gov.nyc.doitt.gis.webmap.strategy.markup.basemap.BasemapByViewportStrategyTest 
[junit] Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 2.016 sec 
[junit] Flushing results... 
[junit] Flushing results done 
[junit] Cobertura: Loaded information on 282 classes. 
[junit] Cobertura: Saved information on 282 classes. 
[junit] Running gov.nyc.doitt.gis.webmap.strategy.markup.basemap.BasemapByZoomLevelAndCenterPointStrategyTest 
[junit] Tests run: 4, Failures: 0, Errors: 0, Time elapsed: 1.853 sec 
[junit] Flushing results... 
[junit] Flushing results done 
[junit] Cobertura: Loaded information on 282 classes. 
[junit] Cobertura: Saved information on 282 classes. 
... 

Sembra pesce che dopo ogni prova Cobertura dice:

[junit] Cobertura: Loaded information on 282 classes. 
[junit] Cobertura: Saved information on 282 classes. 
... 

Ecco la mia unità compito di prova dal mio script di build Ant:

<target name="unit-test" depends="compile-unit-test"> 
    <delete dir="${reports.xml.dir}" /> 
    <delete dir="${reports.html.dir}" /> 
    <mkdir dir="${reports.xml.dir}" /> 
    <mkdir dir="${reports.html.dir}" /> 

    <junit fork="yes" dir="${basedir}" failureProperty="test.failed" printsummary="on"> 
     <!-- 
       Note the classpath order: instrumented classes are before the 
       original (uninstrumented) classes. This is important. 
      --> 
     <classpath location="${instrumented.dir}" /> 
     <classpath refid="test-classpath" /> 

     <formatter type="xml" /> 
     <test name="${testcase}" todir="${reports.xml.dir}" if="testcase" /> 
     <batchtest todir="${reports.xml.dir}" unless="testcase"> 
      <fileset dir="TestSource"> 
       <include name="**/*Test.java" /> 
       <exclude name="**/XmlTest.java" /> 
       <exclude name="**/ElectedOfficialTest.java" /> 
       <exclude name="**/ThematicManagerFixturesTest.java" /> 
      </fileset> 
     </batchtest> 
    </junit> 
</target> 

La configurazione e l'output sembrano corrette? È normale che i test unitari impieghino 2.234 secondi quando vengono eseguiti da soli e quando vengono eseguiti nello script di build con Cobertura occorrono 3 minuti?

+0

non vedo quale sia il problema (oltre ad utilizzare Ant :-P), ma questo tipo di ritardo non è sicuramente normale. –

+0

Suppongo che tu abbia un altro strumento preferito oltre Ant? Cosa raccomanderesti? –

+0

maven e gradle sono entrambi enormi miglioramenti rispetto alla formica. aggiungere la cobertura a un progetto Maven è banale. –

risposta

8

Da cobertura-anttask reference:

Per questo stesso motivo, se si sta utilizzando formica 1.6.2 o superiore, allora si potrebbe desiderare di set forkmode = "una volta" Questo farà sì che solo una JVM per essere avviato per tutti i test JUnit e ridurrà il sovraccarico di Cobertura durante la lettura/scrittura del file di dati di copertura ogni volta che un JVM avvia/arresta.

(corsivo è mio.)

+1

ha funzionato perfettamente, grazie! –