Отчеты Junit показывают только последний класс, который был запущен при выполнении с build.xml - PullRequest
1 голос
/ 05 июня 2011

Я могу получить build.xml для отчета обо всех моих классах, определенных целями, если я вызываю test-all, но если я хочу выполнить только несколько целей, в моем отчете Junit отображается только последний выполненный класс.

Для более подробного объяснения у меня в build.xml есть две цели: «runAll» и «runTest». Когда я выполняю цель runAll, все мои классы отображаются в отчете Junit. Когда я запускаю несколько целей с помощью runTest, в моих отчетах о Junit отображается только последний выполненный класс.

ЭТО РАБОТАЕТ И ОТЧЕТА ВСЕМ КЛАССАМ:
муравейник-все

ЭТО НЕ СООТВЕТСТВУЕТ И ТОЛЬКО ПОСЛЕДНЕМУ КЛАССУ:
Муравей testClass1 testClass2 testClass3

Вот фрагмент того, что я запускаю в моей сборке xml для runAll (этот работает):

<target name="runAll" depends="clean,compile, compileTests">
    <taskdef resource="festjunittasks" classpathref="classpath" />

    <mkdir dir="${report.dir}"/>
    <mkdir dir="${results.dir}"/>
    <mkdir dir="${htmlresults.dir}"/>
    <!-- <mkdir dir="${iphone.dir}"/> -->

      <junit forkmode="perTest" printsummary="yes" haltonfailure="no" haltonerror="no" maxmemory="4096m">



        <classpath>
            <path refid="classpath"/>
        </classpath>

        <formatter classname="org.fest.swing.junit.ant.ScreenshotOnFailureResultFormatter" extension=".xml" />

        <batchtest fork="yes" todir="${results.dir}">
            <fileset dir="${testclasses.dir}" includes="**/*Test*.class" />
        </batchtest>
    </junit>

    <festreport todir="${report.dir}">
        <classpath refid="classpath" />
        <fileset dir="${results.dir}">
          <include name="TEST-*.xml" />
        </fileset>
        <report format="frames" todir="${htmlresults.dir}/html" />
      </festreport>
    <copy todir="${history.dir}">
        <fileset dir="${html.dir}"/>
        </copy>


</target >

Вот фрагмент для моего runTest (в этом сообщается только последний выполненный класс):

<target name="runTest" depends="clean,compile, compileTests">
    <taskdef resource="festjunittasks" classpathref="classpath" />
    <mkdir dir="${report.dir}"/>
    <mkdir dir="${results.dir}"/>
    <mkdir dir="${htmlresults.dir}"/>
    <!-- <mkdir dir="${iphone.dir}"/> -->

    <junit forkmode="perTest" printsummary="yes" haltonfailure="no" haltonerror="no" maxmemory="4096m">

        <classpath>
            <path refid="classpath"/>
        </classpath>

        <formatter classname="org.fest.swing.junit.ant.ScreenshotOnFailureResultFormatter" extension=".xml" />

        <batchtest fork="yes" todir="${results.dir}">
            <fileset dir="${testclasses.dir}" includes="**/${test.to.run}" />
        </batchtest>
    </junit>

    <festreport todir="${report.dir}">
        <classpath refid="classpath" />
        <fileset dir="${results.dir}">
          <include name="TEST-*.xml" />
        </fileset>
        <report format="frames" todir="${htmlresults.dir}/html" />
    </festreport>
    <copy todir="${history.dir}">
        <fileset dir="${html.dir}"/>
    </copy>

</target >

заранее спасибо

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Проблема, с которой вы сталкиваетесь, заключается в том, что когда вы запускаете свой первый тестовый класс и junit создает html-отчет, junit обычно помещает следующие html-файлы в выбранный вами каталог, в вашем случае это будет '$ {htmlresults.dir}/ html ':

/com
all-tests.html
allclasses-frame.html
alltests-errors.html
alltests-fails.html
index.html
overview-frame.html
overview-summary.html
stylesheet.css

При запуске второго теста те же имена файлов html создаются для второго класса и сохраняются в том же каталоге (' $ {htmlresults.dir} / html ').Что происходит, так это то, что html-файлы для первого класса перезаписываются именами html-файлов второго класса, поскольку имена html-файлов постоянны.Глядя на фрагмент build.xml, вы можете просто перейти к цели runTest и заменить узел festreport следующим:

НОВЫЙ узел festreoprt для цели runTest

<festreport todir="${report.dir}"> 
<classpath refid="classpath" />
<fileset dir="${results.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${htmlresults.dir}/html/${test.to.run}" />
</festreport>

OLD festreoprt NODE для цели runTest

<festreport todir="${report.dir}">
<classpath refid="classpath" />
<fileset dir="${results.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${htmlresults.dir}/html" />
</festreport>

Сделанное мной изменение очень просто.

Все, что я сделал, это сказал junit target testRun создать папку с именем только что запущенного класса,

, обозначенного как "$ {htmlresults.dir} / html / $ {test.to.run} ».

Как только эта папка создана, она сохраняет файлы отчета html в папке с указанным именем класса.Когда будет выполнена следующая последовательная цель, junit запустит цель, создаст новую папку с именем класса, который запускается, а затем сохранит html-файлы в папке класса.

После этого вы никогда не столкнетесь с проблемой перезаписи html-файла.

1 голос
/ 06 июня 2011

Похоже, что runTest вызывается в цикле внутри вашей сборки. Если это так, можете ли вы изменить его, чтобы создать единый набор файлов со всеми тестами, которые вы хотите запустить, и запустить их одновременно? Это самый простой способ, потому что junitreport (и, вероятно, festreport) ожидают вывод xml за один прогон.

Если вы не можете запустить тесты вместе, альтернативой является запуск преобразования XML для объединения выходных данных XML перед отправкой отчета. Хотя создание единого набора файлов должно быть проще.

...