Junit / Ant повторно запускает неудачные тесты - PullRequest
3 голосов
/ 11 октября 2011

Мне было интересно, есть ли у кого-нибудь представление о том, как можно было бы повторить повторение неудачных тестов Junit в том же прогоне.Например, тесты 1-5 запускаются, и все проходят затем, когда выполняется тест 6, и он не проходит в первый раз.Затем он автоматически запустится снова во второй раз, прежде чем перейти к тестам 7. Я использую ant-скрипт, который запускает все мои тесты.Тесты проводятся на коробке Гудзона, если это вообще помогает.Я читал о том, что можно выбрать неудавшийся тест и поместить его в новый файл, где они будут запускаться при втором запуске костюма, но это не совсем то, что я ищу.

Любая помощь или указатели вправильное направление будет полезным.Спасибо.

<!-- ============================= -->
<!--   target: test-regression-all -->
<!-- ============================= -->
<!--
<target name="test-regression-all" description="Runs all tests tagged as regression" depends="compile">
    <mkdir dir="${target.reports.dir}"/>
    <junit printsummary="yes" haltonerror="no" haltonfailure="no" fork="yes"
               failureproperty="junit.failure" errorproperty="junit.error" showoutput="true">           
        <formatter type="xml"/>
        <classpath>
            <pathelement location="${target.build.classes.dir}"/>
            <path refid="classpath"/>
        </classpath>
        <batchtest todir="${target.reports.dir}">
           <fileset dir="${src.dir}">
              <include name="emailMarketing/AssetLibrary/*.java" />
              <include name="emailMarketing/attributes/*.java" />
              <include name="emailMarketing/contacts/*.java" />
              <include name="emailMarketing/DomainKeys/*.java" />
              <include name="emailMarketing/lists/*.java" />
              <include name="emailMarketing/messages/*.java" />
              <include name="emailMarketing/Segments/*.java" />
              <include name="emailMarketing/UploadContact/*.java" />
              <exclude name="emailMarketing/lists/ListArchive.java"/>
              <exclude name="emailMarketing/messages/MessageCreation.java" />
           </fileset>
        </batchtest>
        <jvmarg value="-Duser=${user}"/>
        <jvmarg value="-Dpw=${pw}"/>
        <jvmarg value="-Dbrowser=${browser}"/>
        <jvmarg value="-Dserver=${server}"/>
        <jvmarg value="-Dopen=${open}"/>
        <jvmarg value="-DtestType=regression"/>
    </junit>
    <junitreport todir="${target.reports.dir}">
        <fileset dir="${target.reports.dir}">
            <include name="TEST-*.xml"/>
        </fileset>
        <report todir="${target.reports.dir}"/>
    </junitreport>
    <fail if="junit.failure" message="Test(s) failed.  See reports!"/>
    <fail if="junit.error" message="Test(s) errored.  See reports!"/>
</target>

Ответы [ 4 ]

3 голосов
/ 08 ноября 2011

Взгляните на задачу Ant Retry.

<target name="myTest1">
    <mkdir dir="${junit.output.dir}" />
    <retry retrycount="3">
      <junit haltonerror="yes" haltonfailure="yes" 
             fork="no" printsummary="withOutAndErr" 
             showoutput="true" tempdir="c:/tmp">
      <formatter type="xml" />
      <test name="MyPackage.myTest1" todir="${junit.output.dir}" />
      <classpath refid="Libs.classpath" />
      <formatter type="brief" usefile="false"/>
      </junit>
    </retry>
</target>
2 голосов
/ 12 октября 2011

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

Тесты должны быть независимыми , т.е. каждый из них должен выполнить свою собственную настройку (и демонтаж).При использовании junit у вас обычно нет определенного порядка, в котором выполняются тесты.Следовательно, нет необходимости перезапускать test6 для настройки среды для test7.

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

  • http://www.cs.umd.edu/~atif/Teaching/Fall2009/Yuening.pdf даетобзор некоторых методов
  • Кент Бек JUnit Max - отличный инструмент, но стоит около 100 $ в год
  • Infinitest - альтернативный непрерывный тестбегун и с открытым исходным кодом.Он также использует приоритеты тестовых случаев, но мой опыт с этим был довольно разочаровывающим.
0 голосов
/ 23 января 2013

В JUnit 1.8.0 есть средство форматирования «fail» для junit, которое можно использовать для создания TestCase, в котором содержатся только неудачные тесты.См. http://ant.apache.org/manual/Tasks/junit.html:

The fourth formatter named failure (since Ant 1.8.0) collects all failing testXXX()
methods and creates a new TestCase which delegates only these failing methods.
The name and the location can be specified via Java System property or Ant property
ant.junit.failureCollector. The value has to point to the directory and the name of
the resulting class (without suffix). It defaults to java-tmp-dir/FailedTests.
0 голосов
/ 15 марта 2012
...