2011-06-05 49 views
1

如果我調用test-all,但我只想運行幾個目標,我可以讓build.xml報告由目標定義的所有類我的Junit報告只顯示最後一堂課跑了。Junit報告只顯示用build.xml執行時運行的最後一個類

爲了進一步解釋我在build.xml「runAll」和「runTest」中有兩個目標。當我執行runAll目標時,我將所有類都顯示在Junit報告中。當我使用runTest運行多個目標時,我的junit報告只顯示最後一個運行的類。

這部作品並報告所有的類:
螞蟻測試所有

這並不AND ONLY報告的最後一堂課:
螞蟻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 > 

在此先感謝

回答

1

它看起來像的runTest被稱爲在構建內循環。如果是這種情況,您可以將其更改爲創建一個包含您想要運行的所有測試的單個文件集並一次運行它們嗎?這是最簡單的方法,因爲junitreport(可能是festreport)期望從一次運行中輸出xml。

如果您不能一起運行測試,則另一種方法是在報告之前運行XML轉換以合併XML輸出。構建單個文件集應該會更容易。

1

你面臨的問題是,當你運行你的第一個測試類並且junit創建一個html報告時,junit通常會把下面的html文件放在你選擇的目錄中,在你的情況下它會是'$ {htmlresults.dir }/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節點到這一個:

爲的runTest

新festreoprt NODE靶向

<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> 

OLD festreoprt NODE runTest target

<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的目標testRun創建一個剛運行的類命名的文件夾,

通過「$ {表示} htmlresults.dir/HTML/$ {} test.to.run「。

創建該文件夾後,它將html報告文件存儲在具有指定類名的文件夾中。當下一個連續目標被執行時,junit將運行目標,創建一個以正在運行的類的名稱命名的新文件夾,然後將html文件存儲在類文件夾中。

之後你將永遠不會遇到html文件覆蓋問題。

+0

這不會爲每個測試生成單獨的報告,而不是將所有結果合併到一個報告中? – 2011-06-07 00:49:15