/ / ant junit завдання - запуск усіх тестів із безлічі тестових папок, незалежно від відмови - unit-testing, ant, junit

Завдання мурашника - запуск усіх тестів з безглуздих тестових папок, незалежно від відмови - тестування одиниць, мураха, джуніт

Мій сценарій збірки має кілька тестових папокналаштований, кожен з яких містить сотні тестів. Завдання junit виконується в кожній із цих папок. "haltonfailure" і "haltonerror" встановлюється як false, щоб виконання продовжувалось у випадку відмови.

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

Як я можу це зробити (припускаючи, що мені доведеться зберегти декілька тестових структур папок)?

Ось відповідний сценарій мурашок у мене:

<target name="test">

<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>
<junit_test testfolder="folder1"/>
<junit_test testfolder="folder2"/>
<junit_test testfolder="folder3"/>
<junit_test testfolder="folder4"/>
</sequential>
</macrodef>


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

Відповіді:

0 для відповіді № 1

Я думаю, що всі ваші тести запущені, але збірка завершується з першого явного 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>