利用ant和junit實現單元測試的自動化

我們創建一個測試項目,名字爲:test,並創建兩個源文件夾:src和test..把項目源文件和測試文件分開放在這兩個文件夾中。
我們在src編寫一個測試類:
[java] view plain copy
  1. <pre name="code" class="java">package com.widetrust;  
  2.   
  3. public class CountService {  
  4.      private int summary;  
  5.      private int count;  
  6.      public boolean stat(int visitor){  
  7.     count++;  
  8.     summary += visitor;  
  9.     if(summary>1000 && count>2){  
  10.     return true;  
  11.     }else{  
  12.         return false;  
  13.     }  
  14.      }  
  15. }  



在test文件夾寫個測試該類的類:
[java] view plain copy
  1. <pre name="code" class="java">package com.widetrust.test;  
  2.    
  3. import com.widetrust.CountService;  
  4. import junit.framework.TestCase;  
  5.    
  6. public class TestCountService extends TestCase {  
  7.     CountService cs;  
  8.     protected void setUp() throws Exception {  
  9.         cs = new CountService();  
  10.     }  
  11.    
  12.     protected void tearDown() throws Exception {  
  13.     }  
  14.     public void testStat(){        
  15.     assertEquals(true, cs.stat(4000));  
  16.     }  
  17.     public void testStat2(){  
  18.     cs.stat(2000);  
  19.     cs.stat(2000);  
  20.     assertEquals(true, cs.stat(3000));  
  21.     }  
  22. }  

當然我們可以利用eclipse的Run As Junit Test(快捷鍵:Alt+Shift+X T)運行我們剛寫好的測試案例,但有個問題是eclipse不能正確的同步我們的開發和測試程序,而且,我們可能還希望測試的過程中爲我們提供一份詳細的報告文檔,以供我們在測試後的改進過程中的討論。現在我們使用ant的自動編譯功能來實現測試的自動化,並讓它生成一份詳細的測試報告。
  注意的是,ant自帶了junit的支持包,但項目需要junit.jar,還需要在項目的lib文件夾中放置junit.jar,(這裏我假設工程目錄存放項目依賴組件的是lib文件夾)如果我們要單獨使用ant編譯整個項目,需要在項目構建文件build.xml中定義編譯所用到的lib包,在項目的根目錄創建一個build.xml,內容如下:
[html] view plain copy
  1. <pre name="code" class="html"><?xml version="1.0"?>  
  2.    
  3. <project name="ant and junit" default="test auot junit and report" basedir=".">  
  4.      
  5.     <!-- 定義工程依賴的jar包存放的位置 -->  
  6.     <property name="lib.dir" value="lib"/>  
  7.     <path id="classpath">  
  8.        <fileset dir="${lib.dir}" includes="**/*.jar"/>  
  9.     </path>  
  10.    
  11.     <property name="output folder" value="classes"/>  
  12.     <property name="src folder" value="src"/>  
  13.     <property name="test folder" value="test"/>  
  14.     <property name="report folder" value="report"/>  
  15.    
  16.     <target name="clean">  
  17.        <delete dir="report"/>  
  18.        <echo>清除測試報告文件 成功!</echo>  
  19.     </target>  
  20.    
  21.     <target name="compile init">  
  22.        <mkdir dir="${output folder}"/>  
  23.        <echo>創建編譯文件夾 成功!</echo>  
  24.     </target>  
  25.    
  26.     <target name="report init" depends="clean">  
  27.        <mkdir dir="${report folder}"/>  
  28.        <echo>創建測試報告文件夾 成功!</echo>  
  29.     </target>  
  30.    
  31.     <target name="compile" depends="compile init">  
  32.        <javac srcdir="${src folder}" destdir="${output folder}" classpathref="classpath"/>  
  33.        <echo>項目源文件編譯 成功!</echo>  
  34.     </target>  
  35.    
  36.     <target name="test compile" depends="report init">  
  37.        <javac srcdir="${test folder}" destdir="${output folder}" classpathref="classpath"/>  
  38.        <echo>項目測試文件編譯 成功!</echo>  
  39.     </target>  
  40.    
  41.     <target name="all compile" depends="compile, test compile">  
  42.     </target>  
  43.    
  44.     <target name="test auot junit and report" depends="all compile">  
  45.        <junit printsummary="on" fork="true" showoutput="true">  
  46.            <classpath>  
  47.               <fileset dir="${lib.dir}" includes="**/*.jar"/>  
  48.               <pathelement path="${output folder}"/>  
  49.            </classpath>  
  50.            <formatter type="xml"/>  
  51.            <batchtest todir="${report folder}">  
  52.               <fileset dir="${output folder}">  
  53.                   <include name="**/Test*.*"/>  
  54.               </fileset>  
  55.            </batchtest>  
  56.        </junit>  
  57.        <junitreport todir="${report folder}">  
  58.            <fileset dir="${report folder}">  
  59.               <include name="TEST-*.xml"/>  
  60.            </fileset>  
  61.            <report format="frames" todir="${report folder}"/>  
  62.        </junitreport>  
  63.     </target>  
  64.       
  65. </project>  



我們在eclipse中利用windows -> show View -> Ant
打開ant工作窗口,點擊”Add Buildfiles” 將項目的根目錄下的build.xml添加進去,然後在ant工作窗口點運行圖標,可以看到控制檯上的輸出:(當然,用命令行方式運行也可以)
整個項目編譯成功,並在項目根目錄生成一個report文件夾,我們可以從中看到一份詳細的測試報告:
我們可能會希望junit 和ant爲我們提供中文的測試報告,很遺憾的是,ant並沒有給我們提供這個選項,還好,ant可以讓我們通過定義styledir屬性,更改報告文件的輸出樣式的配置文件:我們要做的,就是漢化在ant安裝文件夾中的junit-frames.xsl和junit-noframes.xsl,(也可以從http://download.csdn.net/user/lemonfamily 下載到該文件)甚至可以在裏面定義一些我們需要的東西。
[html] view plain copy
  1. <span style="background-color: rgb(255, 255, 255);">現在我們已經可以做到測試代碼和開發代碼分開,並利用ant的自動編譯功能爲我們執行測試計劃和生成測試報告。雖然在編寫測試案例的時候確實比較麻煩,我們需要詳細的模擬實際應用中的環境,並尋找可能出現錯誤的邊界值幫助我們在編寫實際代碼時儘量減少隱患的發生,往往編寫測試案例的時間比我們編寫實際代碼的時間還長,但這樣做是非常值得的,一個軟件的開發週期最長的60%都是花在尋找錯誤和完善的過程中。</span><span style="font-family:Lucida Grande, Verdana, Arial, sans-serif;color:#333333;"><span style="font-size: 13.3333330154419px; line-height: 20px;">  
  2. </span></span>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章