Может ли Ant выводить список неудачных тестов в конце сборки? - PullRequest
3 голосов
/ 22 ноября 2011

Следующий фрагмент из другого потока работает для печати сообщения и сбоя после запуска всех модульных тестов:

<fail if="junit.failed" message="Oh no ! There were some failed unit tests :( "/>

Однако --- Я не вижу, как я могу также записатьи напечатайте ИМЕНА неудачных тестов в junit / ant после того, как они все запустятся.Есть мысли по этому поводу?

Я считаю, что другие сочли бы такую ​​функцию чрезвычайно важной, поэтому я предполагаю, что существует простое решение: довольно утомительно просматривать сотни неудачных тестов для нарушителей.

Ответы [ 3 ]

5 голосов
/ 22 ноября 2011

Да, это так. Попробуйте использовать задачу junitreport .

, например

Попробуйте этот атрибут в своей задаче junit:

printsummary="yes" на задании Junit

Измените ваш форматер на:

<formatter type="xml" />

и затем создайте отчеты с целью, которая вызывает это:

<junitreport>
<fileset dir="${testReport.dir}/tmp">
      <include name="*.xml" />
</fileset>
<report format="frames" styledir="${testReportXslt.dir}" todir="${finalReport.dir}/html" />
</junitreport>

Для вывода:

    <concat>
        <fileset dir="${finalReport.dir}/html" includes="*.html"/>
        <filterchain>
            <linecontainsregexp>
                <regexp pattern='some pattern' />
            </linecontainsregexp>
        </filterchain>
    </concat>
1 голос
/ 02 августа 2012

Я уверен, что у многих из вас нет желания создавать собственный форматтер или что-то в этом роде. Я тоже Я обнаружил, что при следующей конфигурации результаты испытаний печатаются в stdout, а ошибки печатаются в stderr:

  <target name="test"
          depends="compile-tests"
          description="runs the unit tests">
    <junit failureproperty="hasFailingTests"
           printsummary="on"
           showoutput="true">
      <formatter type="plain" usefile="false" />
      <batchtest>
        <fileset dir="${test.dir}">
          <include name="**/*Test.java" />
          <exclude name="**/Abstract*Test.java" />
        </fileset>
      </batchtest>
      <classpath refid="tests.classpath"></classpath>
    </junit>
    <fail if="hasFailingTests" />
  </target>

Это означает, что выполняется следующая команда:

ant test > /dev/null

будет показывать только stderr с ошибками теста для консоли, что значительно упростит просмотр того, что действительно не удалось.

0 голосов
/ 24 ноября 2011

Я думаю, что наконец-то получил полный ответ на этот вопрос: благодаря взглядам FailedDev.

Во-первых, убедитесь, что у вас переменная $ {reports.dir}, указав каталог для отчетов:

    <property name="reports.dir" value="reports" />

Затем, когда мы начинаем кодировать тестовые инструкции junit:

<target name="test" depends="compile">

Затем создайте необходимые каталоги для отчетов:

    <mkdir dir="${reports.dir}" />
    <mkdir dir="${reports.dir}/tmp" />
    <mkdir dir="${reports.dir}/style" />
    <mkdir dir="${reports.dir}/final" />

Поскольку у нас есть сканер отчетов,мы можем установить для haltonfailure значение no и потерпеть неудачу после (прокрутите вниз).

    <junit printsummary="yes" failureproperty="junit.failed" haltonfailure="no" fork="yes" forkmode="once">
        <jvmarg value="-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" />
        <classpath refid="common.classpath" />
        <classpath>
            <pathelement location="${build.dir}" />
            <pathelement location="${src.dir}" />
        </classpath>
        <formatter type="xml" />
        <batchtest todir="${reports.dir}">
            <fileset dir="${test.dir}">
                <include name="**/Test*.java" />
                <exclude name="**/AllTests.java" />
                <exclude name="**/*.properties" />
                <exclude name="**/*.xml" />
            </fileset>
        </batchtest>
    </junit> 

Теперь вот вам и совет по другим вопросам: запустите отчет junit.

    <!-- Capture all failures, simple debugging statements. -->
    <junitreport>
        <fileset dir="${reports.dir}/tmp">
            <include name="*.xml" />
        </fileset>
        <report todir="${reports.dir}/final" />
    </junitreport>

И, наконец, мы можем напрямую извлекать xml-файлы из-за ошибок:

    <!-- This could be its own task, i.e., a java class which directly processed junit test data. -->
    <echo message="Now checking xml test results for errors"    />
        <exec executable="grep" error="/dev/null">
            <arg value="-r" />
            <arg value="-m" />
            <arg value="1" />
            <arg value="-rl" />
            <arg value="errors=\&quot;[1-9]\&quot;" /> 
            <arg value="${reports.dir}" />
        </exec>

Теперь, поскольку мы не ошибаемся раньше (скорее мы запускаем всю сборкуТаким образом, мы можем видеть, какие тесты провалились, если таковые имеются), мы все равно должны уведомить сборщика о том, что мы провалились ... Это делается с помощью синтаксиса fail-if:

    <fail if="junit.failed" message="FAILING - unit tests failed." />
    <!-- Now, we check if there were failures, and output the results --> 
</target>

Удаление моих комментариевБлок кода должен работать отлично, если вы вставите его в свою сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...