2015-03-24 1 views
0

Mon script de génération comporte plusieurs dossiers de test configurés, chacun contenant des centaines de cas de test. La tâche junit est exécutée sur chacun de ces dossiers.'haltonfailure 'et' haltonerror 'ont la valeur false pour que l'exécution se poursuive en cas d'échec. Cependant, une fois l'exécution de tous les cas de test à partir de ce dossier terminée, la construction s'arrête (en raison de l'échec de certains tests de ce dossier) et ne poursuit pas l'exécution des tests des dossiers restants. Donc, ce que je cherche, c'est que quel que soit le dossier dans lequel l'échec du test se produit, les cas de test des dossiers restants devraient également être exécutés.ant tâche junit - exécution de tous les tests à partir de plusieurs dossiers de test, indépendamment de l'échec

Comment puis-je faire cela (en supposant que je devrais conserver plusieurs structure de dossier de test)?

Voici le script ant pertinent que j'ai:

<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

Note: la version utilisée fourmi est 1.8.4 et la version 3.8.1 est JUnit –

+0

Est-ce que votre construction sort à la première tâche 'fail', soit à' '? – sudocode

Répondre

0

Je pense que tous vos tests sont en cours d'exécution, mais la construction est sortie à votre première explicite fail, à savoir

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

Ant ne continue pas après un échec, vous ne pouvez donc pas utiliser ces instructions pour imprimer tous les résultats.

Voici un exemple d'une façon de réaliser ce que je pense que vous voulez, en utilisant ant:if (Ant 1.9.3+) et en changeant vos blocs fail en blocs conditionnels 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>