如果我调用test-all,我可以获得build.xml来报告目标定义的所有类,但如果我只想运行几个目标,我的Junit报告只显示最后运行的类。
为了进一步解释,我在build.xml中有两个目标"runAll"one_answers"runTest"。当我执行runAll目标时,我会让所有的类都显示在Junit报告中。当我使用runTest运行多个目标时,我的junit报告只显示运行的最后一个类。
这是所有课程的作品和报告:
ant测试所有
这只报告最后一节课:
ant testClass1 testClass2 testClass3
以下是我在runAll的构建xml中运行的内容的片段(这个有效):
<target name="runAll" depends="clean,compile, compileTests">
<taskdef resource="festjunittasks" classpathref="classpath" />
<mkdir dir="${report.dir}"/>
<mkdir dir="${results.dir}"/>
<mkdir dir="${htmlresults.dir}"/>
<!-- <mkdir dir="${iphone.dir}"/> -->
<junit forkmode="perTest" printsummary="yes" haltonfailure="no" haltonerror="no" maxmemory="4096m">
<classpath>
<path refid="classpath"/>
</classpath>
<formatter classname="org.fest.swing.junit.ant.ScreenshotOnFailureResultFormatter" extension=".xml" />
<batchtest fork="yes" todir="${results.dir}">
<fileset dir="${testclasses.dir}" includes="**/*Test*.class" />
</batchtest>
</junit>
<festreport todir="${report.dir}">
<classpath refid="classpath" />
<fileset dir="${results.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${htmlresults.dir}/html" />
</festreport>
<copy todir="${history.dir}">
<fileset dir="${html.dir}"/>
</copy>
</target >
下面是我的runTest的片段(这个只报告最后一个运行的类):
<target name="runTest" depends="clean,compile, compileTests">
<taskdef resource="festjunittasks" classpathref="classpath" />
<mkdir dir="${report.dir}"/>
<mkdir dir="${results.dir}"/>
<mkdir dir="${htmlresults.dir}"/>
<!-- <mkdir dir="${iphone.dir}"/> -->
<junit forkmode="perTest" printsummary="yes" haltonfailure="no" haltonerror="no" maxmemory="4096m">
<classpath>
<path refid="classpath"/>
</classpath>
<formatter classname="org.fest.swing.junit.ant.ScreenshotOnFailureResultFormatter" extension=".xml" />
<batchtest fork="yes" todir="${results.dir}">
<fileset dir="${testclasses.dir}" includes="**/${test.to.run}" />
</batchtest>
</junit>
<festreport todir="${report.dir}">
<classpath refid="classpath" />
<fileset dir="${results.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${htmlresults.dir}/html" />
</festreport>
<copy todir="${history.dir}">
<fileset dir="${html.dir}"/>
</copy>
</target >
提前感谢
看起来runTest是在构建中的一个循环中调用的。如果是这样的话,你能把它改为创建一个包含所有测试的文件集并同时运行吗?这是最简单的方法,因为junitport(可能还有festreport)期望从一次运行中得到xml输出。
如果不能一起运行测试,那么可以选择在报告之前运行XML转换来合并XML输出。不过,构建单个文件集应该更容易。
您面临的问题是,当您运行第一个测试类并且junit创建html报告时,junit通常会将以下html文件放在您选择的目录中,在您的情况下,它将是'${htmlresults.dir}/html/html':
/com
all-tests.html
allclasses-frame.html
alltests-errors.html
alltests-fails.html
index.html
overview-frame.html
overview-summary.html
stylesheet.css
当您运行第二个测试时,会为第二个类创建相同的html文件名,并将其存储在相同的目录中("${htmlresults.dir}/html")。结果是,第一个类的html文件会被第二个类别的html文件名称覆盖,因为html文件名是常量。查看build.xml片段,您可以做的最简单的事情就是转到您的runTest目标,并将festreport节点替换为以下节点:
新的festreoprt节点运行测试目标
<festreport todir="${report.dir}">
<classpath refid="classpath" />
<fileset dir="${results.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${htmlresults.dir}/html/${test.to.run}" />
</festreport>
旧的festreoprt节点运行测试目标
<festreport todir="${report.dir}">
<classpath refid="classpath" />
<fileset dir="${results.dir}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${htmlresults.dir}/html" />
</festreport>
我做的改变非常简单。
我所做的只是告诉junit target testRun创建一个以刚运行的类命名的文件夹
表示为"${htmlresults.dir}/html/${test.to.run}"。
创建该文件夹后,它将html报告文件存储在具有指定类名的文件夹中。当执行下一个连续的目标时,junit将运行该目标,创建一个以正在运行的类命名的新文件夹,然后将html文件存储在类文件夹中。
在那之后,您将永远不会遇到html文件覆盖问题。