2015-03-24 1 views
0

В моем скрипте сборки есть несколько тестовых папок, каждая из которых содержит сотни тестовых примеров. Задача junit выполняется в каждой из этих папок. «haltonfailure» и «haltonerror» установлены в false, поэтому выполнение продолжается в случае сбоя.Задача ant junit - запуск всех тестов из нескольких тестовых папок, независимо от отказа

Однако, как только выполнение всех тестовых примеров из этой папки завершено, сборка останавливается (из-за некоторых неудачных тестов из этой папки) и не продолжает выполнение тестов из оставшихся папок. Так что я ищу, что независимо от того, в какой папке происходит сбой теста, также должны выполняться тестовые примеры из остальных папок.

Как это сделать (при условии, что мне нужно будет сохранить несколько тестовых папок)?

Вот соответствующий муравей скрипт у меня есть:

<target name="test"> 
 

 
\t <junit_tests /> 
 
    
 
    <antcall target="generatetxtreport"/> 
 
    <antcall target="generatexmlreport"/> 
 
    <fail message="folder1 test(s) failed" if="junit.folder1.failed"/> 
 
    <fail message="folder2 test(s) failed" if="junit.folder2.failed"/> 
 
    <fail message="folder3 test(s) failed" if="junit.folder3.failed"/> 
 
    <fail message="folder4 test(s) failed" if="junit.folder4.failed"/> 
 

 
    <fail message="folder1 test(s) error" if="junit.folder1.error"/> 
 
    <fail message="folder2 test(s) error" if="junit.folder2.error"/> 
 
    <fail message="folder3 test(s) error" if="junit.folder3.error"/> 
 
    <fail message="folder4 test(s) error" if="junit.folder4.error"/> 
 
</target> 
 

 

 
<macrodef name="junit_tests"> 
 
<sequential> 
 
\t <junit_test testfolder="folder1"/> 
 
\t <junit_test testfolder="folder2"/> 
 
\t <junit_test testfolder="folder3"/> 
 
\t <junit_test testfolder="folder4"/> 
 
</sequential> 
 
</macrodef> 
 

 

 
<macrodef name="junit_test"> 
 
<attribute name="testfolder"/> 
 
<attribute name="testMode" default="once"/> 
 
<sequential> 
 
    <junit printsummary="true" 
 
\t \t haltonfailure="false" 
 
\t \t haltonerror="false" 
 
\t \t fork="on" 
 
\t \t forkmode="@{testMode}" 
 
\t \t failureproperty="[email protected]{testfolder}.failed" 
 
\t \t errorproperty="[email protected]{testfolder}.error" 
 
\t \t showoutput="false" 
 
\t \t outputtoformatters="true"> 
 
\t <formatter type="brief" usefile="false"/> 
 
\t <formatter type="xml"/> 
 
\t <classpath> 
 
\t <path refid="some.classpath"/> 
 
\t </classpath> 
 
\t <batchtest todir="some.dir"> 
 
\t <fileset dir="some.root\@{testfolder}\"> 
 
\t \t <include name="**/Test*.class"/> 
 
\t </fileset> 
 
\t </batchtest> 
 
    </junit> 
 
</sequential> 
 
</macrodef>

+0

Примечания: муравей версия используется 1.8.4 и JUnit версия 3.8.1 –

+0

ли, что ваши сборки выходят на первый 'fail' задачи, то есть в' <терпеть неудачу сообщения = "Folder1 тестов (ы) failed "if =" junit.folder1.failed "/>'? – sudocode

ответ

0

Я думаю, что все тесты работают, но сборка выхода на ваш первый явный fail, т.е.

<fail message="folder1 test(s) failed" if="junit.folder1.failed"/> 

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

Вот пример одного способа, в котором вы могли бы добиться того, что я думаю, что вы хотите, используя ant:if (Ant 1.9.3+) и изменив fail блоки в условных echo блоков.

<project name="test" default="test" xmlns:if="ant:if" xmlns:unless="ant:unless"> 

    <target name="test"> 

     <junit_tests /> 

     <condition property="junit.overall.failed"> 
      <or> 
       <istrue value="${junit.folder1.failed}"/> 
       <istrue value="${junit.folder2.failed}"/> 
      </or> 
     </condition> 

     <condition property="junit.overall.error"> 
      <or> 
       <istrue value="${junit.folder1.error}"/> 
       <istrue value="${junit.folder2.error}"/> 
      </or> 
     </condition> 

     <echo message="folder folder1 test(s) failed" if:true="${junit.folder1.failed}"/> 
     <echo message="folder folder2 test(s) failed" if:true="${junit.folder2.failed}"/> 
     <echo message="folder folder1 test(s) error" if:true="${junit.folder1.error}"/> 
     <echo message="folder folder2 test(s) error" if:true="${junit.folder2.error}"/> 

     <fail message="some tests had errors" if="junit.overall.error"/> 
     <fail message="some tests failed" if="junit.overall.failed"/> 

    </target>