Безоговорочно выполнить задачу в муравье? - PullRequest
6 голосов
/ 24 сентября 2008

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

<target name="mytarget">
  <testng outputDir="${results}" ...>
    ...
  </testng>
  <echo>Tests complete.  Results available in ${results}</echo>
</target>

К сожалению, если тесты не пройдены, задача не будет выполнена и выполнение будет прервано. Так что сообщение выводится только в случае прохождения тестов - противоположность того, что я хочу. Я знаю, что могу поставить задачу перед задачей, но это облегчит пользователям пропуск этого сообщения. Возможно ли то, что я пытаюсь сделать?

Обновление: Оказывается, я тупой. У меня было haltOnFailure = "true" в моей задаче , которая объясняет поведение, которое я видел. Теперь проблема в том, что установка этого значения в false приводит к успешному завершению сборки ant, даже если тесты не пройдены, а это не то, чего я хочу. Приведенный ниже ответ с использованием задачи выглядит так, как будто я хочу этого.

Ответы [ 5 ]

5 голосов
/ 24 сентября 2008

Вы можете использовать блок try-catch следующим образом:

<target name="myTarget">
    <trycatch property="foo" reference="bar">
        <try>
            <testing outputdir="${results}" ...>
                ...
            </testing>
        </try>

        <catch>
            <echo>Test failed</echo>
        </catch>

        <finally>
            <echo>Tests complete.  Results available in ${results}</echo>
        </finally>
    </trycatch>
</target>
5 голосов
/ 24 сентября 2008

Согласно Ant docs , есть два свойства, которые контролируют, остановлен ли процесс сборки в случае сбоя задачи testng:

haltonfailure - остановить процесс сборки если сбой произошел во время тестовый забег. По умолчанию false.

haltonskipped - Остановить процесс сборки если есть хотя бы пропущенный тест. По умолчанию false.

Я не могу сказать по фрагменту, устанавливаете ли вы это свойство или нет. Возможно, стоит попытаться явно установить для haltonfailure значение false, если в данный момент установлено значение true.

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

failonerror - Остановить процесс сборки, если команда завершается с кодом возврата сбой сигнализации. По умолчанию false.

failifexecutionfails - Остановить сборку, если мы не можем запустить программу. По умолчанию true.

Не могу сказать, основываясь на фрагменте частичного кода в вашем сообщении, но я предполагаю, что наиболее вероятным виновником является failonerror или haltonfailure , установленный в true.

4 голосов
/ 25 сентября 2008

Решением вашей проблемы является использование failureProperty в сочетании со свойством haltOnFailure задачи testng, например:

<target name="mytarget">
  <testng outputDir="${results}" failureProperty="tests.failed" haltOnFailure="false" ...>
    ...
  </testng>
  <echo>Tests complete.  Results available in ${results}</echo>
</target>

Затем, в другом месте, когда вы хотите, чтобы сборка не удалась, вы добавляете код ant следующим образом:

<target name="doSomethingIfTestsWereSuccessful" unless="tests.failed">
   ...
</target>

<target name="doSomethingIfTestsFailed" if="tests.failed">
   ...
   <fail message="Tests Failed" />
</target>

Затем вы можете вызвать doSomethingIfTestsFailed там, где вы хотите, чтобы ваша сборка муравья провалилась.

0 голосов
/ 24 сентября 2008

Можете ли вы раскошелиться на тестовую задачу? Если да, то вы можете использовать эту функцию, чтобы задача testng запускалась на другой виртуальной машине Java.

0 голосов
/ 24 сентября 2008

Хотя в вашем примере вы показываете поддельную задачу под названием «testng», я предполагаю, что вы используете цель junit.

В этом случае странно, что вы видите эти результаты, потому что цель junit по умолчанию НЕ прерывает выполнение при сбое теста.

Есть способ фактически сообщить муравью, что нужно остановить сборку при сбое или ошибке junit, используя атрибуты остановки, например. haltonfailure

<target name="junit" depends="junitcompile">
    <junit printsummary="withOutAndErr" fork="yes" haltonfailure="yes">

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

http://ant.apache.org/manual/Tasks/junit.html

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