Junit Reports仅显示使用build.xml执行时运行的最后一个类



如果我调用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文件覆盖问题。

相关内容

  • 没有找到相关文章

最新更新