我正在尝试定义在目标完成执行时发出(使用echo)消息的任务,无论该目标是否成功.具体来说,目标执行一个任务来运行一些单元测试,我想发出一条消息,指出结果的可用位置:
<target name="mytarget"> <testng outputDir="${results}" ...> ... </testng> <echo>Tests complete. Results available in ${results}</echo> </target>
不幸的是,如果测试失败,则任务失败并且执行中止.因此,只有在测试通过时才输出消息 – 与我想要的相反.我知道我可以将任务放在任务之前,但这会让用户更容易错过这条消息.我正在尝试做什么?
更新:事实证明我是愚蠢的.我的< testng>中有haltOnFailure =“true”任务,这解释了我所看到的行为.现在的问题是,将此设置为false会导致整个ant构建成功,即使测试失败,这也不是我想要的.以下使用该任务的答案看起来可能是我想要的……
解决方法
您的问题的解决方案是将failureProperty与testng任务的haltOnFailure属性一起使用,如下所示:
<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>