Медленное тестирование с Cobertura - PullRequest
8 голосов
/ 26 сентября 2011

Я недавно интегрировал Cobertura в свои скрипты сборки Ant, и мне интересно, правильно ли я это сделал, потому что это значительно замедлило время, необходимое для запуска модульных тестов.

Вот пример вывода консоли:

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

Кажется подозрительным, что после каждого теста Кобертура говорит:

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

Вот мое задание по модульному тестированию из сценария сборки 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>

Мои настройки и вывод кажутся правильными? Является ли нормальным, что модульные тесты занимают 2,234 секунды при запуске в одиночку, а при запуске в сценарии сборки с Cobertura - 3 минуты?

1 Ответ

8 голосов
/ 27 сентября 2011

С ссылка cobertura-anttask :

По этой же причине, если вы используете муравей 1.6.2 или выше, то вы set forkmode = "once" Это приведет к тому, что будет работать только одна JVM запущен для всех ваших тестов JUnit и уменьшит накладные расходы Cobertura читает / записывает файл данных покрытия каждый раз, когда JVM включение / выключение.

(Акцент мой.)

...