我有一些通过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。总而言之,这是一个hacky,不优雅的解决方案,我希望有人有更好的解决方案。
答案 0 :(得分:3)
两种可能性
-1-
对脚本的特定部分使用一些try / catch / finally构造
你需要一些提供这些功能的Ant插件,例如: =
Flaka
Antcontrib / Antelope
<trycatch>
<try>
<exec .../>
</try>
<catch>
do your cleanup here
and afterwards don't forget to fail
</fail message="......."/>
</catch>
optionally you may use a finally section also
<finally>
..
</finally>
</trycatch>
-2-
对整个脚本使用buildlistener(BUILD SUCCESSFUL,BUILD FAILED)
Kev Jackson在他的演讲中有一个很好的例子,他是http://people.apache.org/~kevj/ossummit/extending-ant.html(exec-listener的来源包含在幻灯片中)
您可以在构建完成后根据构建结果启动特定任务
<!-- taskcontainer -->
<exec-listener onSuccess="true|false">
..
your stuff goes here
..
</exec-listener>
答案 1 :(得分:0)
Ant contrib有一个try-catch-finally的概念。然而,对于特定的块而言,这是最终的,而不是整个脚本。