Ant中exec失败的条件任务

时间:2011-06-17 14:26:14

标签: unit-testing ant build-automation

我有一些通过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,不优雅的解决方案,我希望有人有更好的解决方案。

2 个答案:

答案 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的概念。然而,对于特定的块而言,这是最终的,而不是整个脚本。