У меня есть несколько модульных тестов, выполняющихся через Ant, и я хотел бы иметь возможность запустить некоторый код очистки, если модульные тесты не пройдут. Я искал какой-то блок "наконец-то", но мне не повезло найти его. Я пытался использовать errorproperty и if в задачах, но ant принимает только «true», «on» и «yes» в качестве истинных свойств. Успешно выполненное задание (по крайней мере, в Unix) возвращает 0, поэтому мне пришлось создать невероятно сложный аппарат:
<project name="TestBuild" default="build" basedir=".">
<target name="build" depends="truth,checkresult,cleanup" />
<target name="truth">
<echo message="Running Truth" />
<exec executable="false" errorproperty="testfailure"/>
</target>
<target name="checkresult">
<condition property="testfailed">
<not>
<equals arg1="${testfailure}" arg2="0" />
</not>
</condition>
</target>
<target name="cleanup" if="testfailed">
<echo message="cleanup" />
<fail />
</target>
Есть ли более простой способ сделать это? С одной стороны, это требует выполнения задач, что кажется смешным. Это также означает, что мне придется вызывать их оба после каждого блока модульных тестов, потому что я, очевидно, не могу установить failonerror, как обычно. В общем, это хакерское, не элегантное решение, и я надеюсь, что у кого-то есть лучшее.