ant junit task - 从多个测试文件夹运行所有测试,无论失败

时间:2015-03-24 11:14:23

标签: unit-testing ant junit

我的构建脚本配置了多个测试文件夹,每个文件夹包含数百个测试用例。 junit任务在每个文件夹上执行.'haltonfailure'和'haltonerror'设置为false,以便在失败的情况下继续执行。

但是,一旦从该文件夹执行所有测试用例,构建就会停止(由于某些测试从该文件夹失败),并且不会继续执行剩余文件夹中的测试。 所以我要找的是,无论测试失败发生在哪个文件夹,剩余文件夹中的测试用例也应该被执行。

我该怎么做(假设我必须保留多个测试文件夹结构)?

以下是我的相关蚂蚁脚本:

<target name="test">

	<junit_tests />
    
    <antcall target="generatetxtreport"/>
    <antcall target="generatexmlreport"/>
    <fail message="folder1 test(s) failed" if="junit.folder1.failed"/>
    <fail message="folder2 test(s) failed" if="junit.folder2.failed"/>
    <fail message="folder3 test(s) failed" if="junit.folder3.failed"/>
    <fail message="folder4 test(s) failed" if="junit.folder4.failed"/>

    <fail message="folder1 test(s) error" if="junit.folder1.error"/>
    <fail message="folder2 test(s) error" if="junit.folder2.error"/>
    <fail message="folder3 test(s) error" if="junit.folder3.error"/>
    <fail message="folder4 test(s) error" if="junit.folder4.error"/>
</target>


<macrodef name="junit_tests">
<sequential>
	<junit_test testfolder="folder1"/>
	<junit_test testfolder="folder2"/>
	<junit_test testfolder="folder3"/>
	<junit_test testfolder="folder4"/>
</sequential>
</macrodef>


<macrodef name="junit_test">
<attribute name="testfolder"/>
<attribute name="testMode" default="once"/>
<sequential>
  <junit printsummary="true"
		 haltonfailure="false"
		 haltonerror="false"
		 fork="on"
		 forkmode="@{testMode}"
		 failureproperty="junit.@{testfolder}.failed"
		 errorproperty="junit.@{testfolder}.error"
		 showoutput="false"
		 outputtoformatters="true">
	<formatter type="brief" usefile="false"/>
	<formatter type="xml"/>
	<classpath>
	  <path refid="some.classpath"/>
	</classpath>
	<batchtest todir="some.dir">
	  <fileset dir="some.root\@{testfolder}\">
		<include name="**/Test*.class"/>
	  </fileset>
	</batchtest>
  </junit>
</sequential>
</macrodef>

1 个答案:

答案 0 :(得分:0)

我认为你的所有测试都在运行,但是你的第一个显式fail正在退出,即

<fail message="folder1 test(s) failed" if="junit.folder1.failed"/>

Ant不会继续失败,因此您无法使用这些语句打印所有结果。

以下是使用ant:if(Ant 1.9.3+)并将fail块更改为条件echo的方法,您可以通过这种方式实现我的想法。块。

<project name="test" default="test" xmlns:if="ant:if" xmlns:unless="ant:unless">

    <target name="test">

        <junit_tests />

        <condition property="junit.overall.failed">
            <or>
                <istrue value="${junit.folder1.failed}"/>
                <istrue value="${junit.folder2.failed}"/>
            </or>
        </condition>

        <condition property="junit.overall.error">
            <or>
                <istrue value="${junit.folder1.error}"/>
                <istrue value="${junit.folder2.error}"/>
            </or>
        </condition>

        <echo message="folder folder1 test(s) failed" if:true="${junit.folder1.failed}"/>
        <echo message="folder folder2 test(s) failed" if:true="${junit.folder2.failed}"/>
        <echo message="folder folder1 test(s) error" if:true="${junit.folder1.error}"/>
        <echo message="folder folder2 test(s) error" if:true="${junit.folder2.error}"/>

        <fail message="some tests had errors" if="junit.overall.error"/>
        <fail message="some tests failed" if="junit.overall.failed"/>

    </target>