我的项目有几个模块,每个模块都有自己的构建脚本,目标名为“单元测试”(运行单元测试)。我创建了一个Ant脚本,它调用模块中的“单元测试”目标,运行所有测试,然后从执行的测试的输出生成junitreport
(保存在xml文件中)。到目前为止一切都那么好,但我现在想要的是,如果至少有一个测试失败,那么构建失败。
我的脚本现在看起来像这样,我需要一些方法来查明单元测试是否失败。(我知道failureproperty
任务中的junit
但我不知道我怎么能把它传递给调用脚本)
....
<target name="run-unit-tests" depends="init-output">
<ant antfile="${module1}/build.xml" inheritAll="false" target="${junit-target}" />
<ant antfile="${module2}/build.xml" inheritAll="false" target="${junit-target}" />
....
</target>
<target name="default" depends="run-unit-tests">
<junitreport todir="${junit.report.dir}" tofile="TEST-UnitTestSuites.xml">
<fileset dir="${junit.output.dir}">
<include name="**/TEST-*.xml" />
</fileset>
</junitreport>
//---->fail the build if at least one unit tests has failed
</target>
非常感谢任何想法。谢谢:))
答案 0 :(得分:1)
在尝试提出各种“技巧”来实现这一点后,我终于找到了一种我很高兴的方法。我为每个模块的build.xml文件定义了一个目标:
<junit failureproperty="testsFailed" showoutput="true">
...
<formatter type="xml" />
</junit>
<fail if="${testsFailed}" message="Some of the unit tests failed." />
<!-- the fail task throws an exception if ${testsFailed} is true -->
这将在模块中执行单元测试,如果任何测试失败,则会抛出异常。它还将junit输出记录在xml文件中。在tests.xml构建文件中,我有这样的东西:
<target name="run-unit-tests" >
<run-tests location="${module1.location}" />
<run-tests location="${module2.location}" />
</target>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- Writes the results of the unit tests in a junit report -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<target name="unit-tests" depends="run-unit-tests">
<junitreport todir="${junit.report.dir}" tofile="TEST-UnitTestSuites.xml">
<fileset dir="${junit.output.dir}">
<include name="**/TEST-*.xml" />
</fileset>
</junitreport>
<fail if="${testsFailed2}" message="Some of the unit tests failed." />
</target>
<macrodef name="run-tests">
<attribute name="location" />
<sequential>
<trycatch>
<try>
<echo message="@{location}" />
<if>
<available file="@{location}/build.xml" />
<then>
<ant antfile="@{location}/build.xml" inheritAll="false" target="${junit-target}" />
</then>
</if>
</try>
<catch>
<property name="testsFailed2" value="true" />
</catch>
</trycatch>
</sequential>
</macrodef>
如果模块中的测试失败,则捕获异常并设置testsFailed2
属性。现在运行所有测试并将junit输出保存在同一文件夹中。 unit-tests
目标从所有测试输出创建单个xml报告(此报告可用于持续集成构建),如果任何单元测试失败,则ant脚本将失败。
希望这有助于某人:)