Вопрос

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

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

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

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

Это было полезно?

Решение

Решение вашей проблемы - использовать 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, если хотите, чтобы сборка ant завершилась неудачей.

Другие советы

Вы можете использовать Попробуйте поймать заблокировать так:

<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>

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

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

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

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

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

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

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

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

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

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

Существует способ фактически сказать ant остановить сборку в случае сбоя или ошибки junit, используя атрибуты остановки, например. Хэлтонфейлер:

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top