2011-09-26 12 views
8

Niedawno zintegrowałem Coberturę z moimi skryptami do budowania Ant i zastanawiam się, czy zrobiłem to poprawnie, ponieważ znacznie spowolniło to czas potrzebny do uruchomienia testów jednostkowych.Testowanie jednostek powoli z Coberturą

Oto wyjście konsola próbki:

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

Wydaje się podejrzane, że po każdym przebiegu testu mówi Cobertura:

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

Oto moja jednostka zadanie Test z mojego Ant skryptu build:

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

Czy moja konfiguracja i dane wyjściowe wydają się być poprawne? Czy to normalne, że testy jednostkowe trwają 2.234 sekundy, gdy są uruchamiane samodzielnie, a kiedy są uruchamiane w skrypcie kompilacji z Coberturą, trwają 3 minuty?

+0

nie widzę, co jest problemem (oprócz wykorzystania Ant :-P), ale tego rodzaju opóźnienia na pewno nie jest normalne. –

+0

Zakładam, że masz inne preferowane narzędzie niż Ant? Co byś polecił? –

+0

maven i gradle są zarówno ogromne ulepszenia w stosunku do ant. dodanie cobertury do projektu maven jest banalne. –

Odpowiedz

8

Od cobertura-anttask reference:

Z tego samego powodu, jeśli używasz Ant 1.6.2 lub wyższej wtedy chcieć ustawionej forkmode = "once" To spowoduje tylko jedno JVM be Rozpoczęty dla wszystkich testów JUnit i zmniejszy obciążenie związane z Cobertura odczytywaniem/zapisywaniem pliku danych pokrycia za każdym razem, gdy JVM uruchamia się/zatrzymuje.

(podkreślenie moje).

+1

działało idealnie, dziękuję! –