Ant是否有可能在构建结束时列出失败的测试?

时间:2011-11-22 18:36:23

标签: java unit-testing ant

以下代码片段来自另一个线程,用于打印消息并在运行所有单元测试后失败:

<fail if="junit.failed" message="Oh no ! There were some failed unit tests :( "/>

然而---我没有看到如何在junit / ant中记录并打印失败测试的NAMES,之后它们全部运行。有什么想法吗?

我相信其他人会发现这样的功能非常重要,所以我假设存在一个简单的解决方案:通过数百次失败的测试来查看违法者是非常繁琐的。

2 个答案:

答案 0 :(得分:5)

是的。尝试使用junitreport任务。

e.g。

在junit任务上尝试此属性:

关于junit任务的

printsummary="yes"

将格式化程序更改为:

<formatter type="xml" />

然后使用调用此目标的目标创建报告:

<junitreport>
<fileset dir="${testReport.dir}/tmp">
      <include name="*.xml" />
</fileset>
<report format="frames" styledir="${testReportXslt.dir}" todir="${finalReport.dir}/html" />
</junitreport>

输出:

    <concat>
        <fileset dir="${finalReport.dir}/html" includes="*.html"/>
        <filterchain>
            <linecontainsregexp>
                <regexp pattern='some pattern' />
            </linecontainsregexp>
        </filterchain>
    </concat>

答案 1 :(得分:0)

我想我终于对这个问题有了完整的答案:感谢FailedDev的见解。

首先,确保$ {reports.dir}变量,指定报告的目录:

    <property name="reports.dir" value="reports" />

然后,当我们开始编写测试指令junit时:

<target name="test" depends="compile">

然后,为报告制作必要的目录:

    <mkdir dir="${reports.dir}" />
    <mkdir dir="${reports.dir}/tmp" />
    <mkdir dir="${reports.dir}/style" />
    <mkdir dir="${reports.dir}/final" />

由于我们有一个报告扫描程序,我们可以将haltonfailure设置为no,并在(向下滚动)之后失败。

    <junit printsummary="yes" failureproperty="junit.failed" haltonfailure="no" fork="yes" forkmode="once">
        <jvmarg value="-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" />
        <classpath refid="common.classpath" />
        <classpath>
            <pathelement location="${build.dir}" />
            <pathelement location="${src.dir}" />
        </classpath>
        <formatter type="xml" />
        <batchtest todir="${reports.dir}">
            <fileset dir="${test.dir}">
                <include name="**/Test*.java" />
                <exclude name="**/AllTests.java" />
                <exclude name="**/*.properties" />
                <exclude name="**/*.xml" />
            </fileset>
        </batchtest>
    </junit> 

现在,这里是其他问题的建议:运行junit报告。

    <!-- Capture all failures, simple debugging statements. -->
    <junitreport>
        <fileset dir="${reports.dir}/tmp">
            <include name="*.xml" />
        </fileset>
        <report todir="${reports.dir}/final" />
    </junitreport>

最后,我们可以直接grep xml文件,以获取错误:

    <!-- This could be its own task, i.e., a java class which directly processed junit test data. -->
    <echo message="Now checking xml test results for errors"    />
        <exec executable="grep" error="/dev/null">
            <arg value="-r" />
            <arg value="-m" />
            <arg value="1" />
            <arg value="-rl" />
            <arg value="errors=\&quot;[1-9]\&quot;" /> 
            <arg value="${reports.dir}" />
        </exec>

现在,由于我们没有提前失败(我们正在运行整个构建,所以我们可以看到哪些测试失败了,如果有的话)我们仍然必须通知构建器我们已经失败...这是通过fail-if语法:

    <fail if="junit.failed" message="FAILING - unit tests failed." />
    <!-- Now, we check if there were failures, and output the results --> 
</target>

删除我的评论,如果将其粘贴到您的构建中,此代码块应该可以正常工作。