以下代码片段来自另一个线程,用于打印消息并在运行所有单元测试后失败:
<fail if="junit.failed" message="Oh no ! There were some failed unit tests :( "/>
然而---我没有看到如何在junit / ant中记录并打印失败测试的NAMES,之后它们全部运行。有什么想法吗?
我相信其他人会发现这样的功能非常重要,所以我假设存在一个简单的解决方案:通过数百次失败的测试来查看违法者是非常繁琐的。
答案 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=\"[1-9]\"" />
<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>
删除我的评论,如果将其粘贴到您的构建中,此代码块应该可以正常工作。