隨筆-94  評論-56  文章-3  trackbacks-0
          這一篇講述如何自動運行JUnit測試進行自動化測試。我們將JUnit測試放在test目錄。
          第一步:編譯測試
          首先,在build.xml文件里定義一個單獨的構建目標,以便編譯測試源文件。
          ? <target name="compile-tests" depends="compile">
          ??? <javac srcdir="${test.dir}" destdir="${build.test.dir}">
          ????? <classpath refid="project.classpath" />
          ??? </javac>
          ? </target>
          compile-tests目標用<javac>任務在test.dir目錄編譯測試源文件,并將結果類文件放入build.test.dir目錄,用project.classpath路徑作為測試代碼的類路徑。
          第二步:運行測試
          在build.xml文件里定義構建目標,使所有的JUnit測試自動運行。
          ? <target name="test" depends="compile-tests">
          ??? <junit haltonfailure="true">
          ????? <classpath refid="project.classpath" />
          ????? <formatter type="brief" usefile="false" />
          ????? <batchtest>
          ??????? <fileset dir="${build.test.dir}"
          ????????? includes="**/*Test.class" />
          ????? </batchtest>
          ????? <sysproperty key="doc.dir"?? value="${doc.dir}" />
          ????? <sysproperty key="index.dir" value="${index.dir}" />
          ??? </junit>
          ? </target>
          test目標的depends屬性生成與剛定義的compile-tests目標的依存關系。
          如果構建成功,意味著所有的東西不僅都編譯過,還都通過了測試。
          將haltonfailure屬性設為true會使構建隨著任何測試失敗而失敗。
          這里我們再次用project.classpath定義了運行JUnit測試的類路徑。
          下面定義了一個輸出格式化器,在<formatter> 元素中,使用brief類型來輸出每個運行的測試用例的名稱及其統計信息,僅當測試失敗時才有更詳細的信息(plain類型默認比brief類型輸出信息多一些;xml類型將測試結果以XML格式輸出)。將usefile屬性值設為false會將測試結果送往控制臺,而不是寫入文件。
          <batchtest>任務收集從封閉<fileset>元素中返回的所有測試,并自動創建包含了所有測試的測試suite。我們將對所有的測試類用*Test.java命名約定取名,這些文件將編譯成*Test.class文件,放在<fileset>的build.test.dir性質指向的目錄中。
          最后,<sysproperty>元素定義系統性質為一個鍵值對,這些性質可以在測試代碼中訪問。這里,測試需要知道從哪里找到文檔,以及向哪里放入文檔的索引結果,在運行測試時我們將傳遞這些結果,例如,測試在運行時查看送入的doc.dir系統性質來定位項目目錄結構中doc目錄的絕對路徑。
          要運行測試,請執行test目標:
          $?ant test
          最后,打掃戰場
          我們可以定義一個刪除所有構建輸出的Ant目標。
          ? <target name="clean">
          ??? <delete dir="${build.dir}" />
          ? </target>
          clean目標使用<delete>任務來刪除build.dir所指的目錄。要刪除目錄,請運行clean目標:
          $ ant clean
          沖掉這些構建輸出有積極的作用:從頭開始生成構建,可以發現可能被累積構建掩蓋的錯誤。

          完整的build.xml:
          <?xml?version="1.0"?>
          <!--
          ??Excerpted?from?the?book,?"Pragmatic?Project?Automation"
          ??ISBN?0-9745140-3-9
          ??Copyright?2004?The?Pragmatic?Programmers,?LLC.??All?Rights?Reserved.
          ??Visit?www.PragmaticProgrammer.com
          ?
          -->

          <project?name="dms"?default="compile"?basedir=".">
          ??
          ??
          <property?name="build.dir"??????location="build"/>
          ??
          <property?name="build.prod.dir"?location="${build.dir}/prod"/>
          ??
          <property?name="build.test.dir"?location="${build.dir}/test"/>
          ??
          <property?name="doc.dir"????????location="doc"/>
          ??
          <property?name="index.dir"??????location="index"/>
          ??
          <property?name="src.dir"????????location="src"/>
          ??
          <property?name="test.dir"???????location="test"/>
          ??
          <property?name="vendor.lib.dir"?location="vendor/lib"/>

          ??
          <path?id="project.classpath">
          ????
          <pathelement?location="${build.prod.dir}"?/>
          ????
          <pathelement?location="${build.test.dir}"?/>
          ????
          <fileset?dir="${vendor.lib.dir}">
          ??????
          <include?name="*.jar"/>
          ????
          </fileset>
          ??
          </path>????

          ??
          <target?name="prepare">
          ????
          <mkdir?dir="${build.prod.dir}"/>
          ????
          <mkdir?dir="${build.test.dir}"/>
          ??
          </target>


          ??
          <target?name="compile"?depends="prepare">
          ????
          <javac?srcdir="${src.dir}"?destdir="${build.prod.dir}">
          ??????
          <classpath?refid="project.classpath"?/>
          ????
          </javac>
          ??
          </target>

          ??
          <target?name="compile-tests"?depends="compile">
          ????
          <javac?srcdir="${test.dir}"?destdir="${build.test.dir}">
          ??????
          <classpath?refid="project.classpath"?/>
          ????
          </javac>
          ??
          </target>

          ??
          <target?name="test"?depends="compile-tests">
          ????
          <junit?haltonfailure="true">
          ??????
          <classpath?refid="project.classpath"?/>
          ??????
          <formatter?type="brief"?usefile="false"?/>
          ??????
          <batchtest>
          ????????
          <fileset?dir="${build.test.dir}"?
          ??????????includes
          ="**/*Test.class"?/>
          ??????
          </batchtest>
          ??????
          <sysproperty?key="doc.dir"???value="${doc.dir}"?/>
          ??????
          <sysproperty?key="index.dir"?value="${index.dir}"?/>
          ????
          </junit>
          ??
          </target>

          ??
          <target?name="clean">
          ????
          <delete?dir="${build.dir}"?/>
          ??
          </target>
          ??
          </project>

          下面再舉一個實際項目中用到的構建文件的例子:
          <?xml?version="1.0"??>

          <project?name="JSBook"?default="compile"?basedir=".">

          ??
          <property?environment="env"?/>
          ??
          <property?name="src"?value="WEB-INF/src"?/>
          ??
          <property?name="classes"?value="WEB-INF/classes"?/>
          ??
          <property?name="lib"?value="WEB-INF/lib"?/>?
          ??
          <property?name="dist"?value="dist"?/>
          ??
          ??
          <path?id="task.classpath">
          ????
          <pathelement?location="${classes}"?/>
          ????
          <pathelement?location="${lib}"?/>?
          ????
          <!--?Tomcat?5.0.16?Servlet?2.4?API?-->
          ????
          <pathelement?location="${lib}/servlet-api.jar"?/>
          ????
          <!--?Tomcat?5.0.16?JSP?2.0?API?-->
          ????
          <pathelement?location="${lib}/jsp-api.jar"?/>
          ??
          </path>
          ????
          ??
          <target?name="init"?>
          ????
          <echo>Init?Complete?!</echo>
          ????
          <echo>ant?home?=?${ant.home}?</echo>
          ????
          <echo>java?home?=?${java.home}?</echo>
          ????
          <echo>user?home?=?${user.home}?</echo>??????
          ??
          </target>
          ??
          ??
          <target?name="compile"?depends="init"?>
          ????
          <javac?classpathref="task.classpath"?srcdir="${src}"?destdir="${classes}"?/>
          ????
          <echo?level="verbose">Seen?with?-verbose</echo>
          ????
          <echo?level="debug">Seen?with?-debug</echo>????????
          ????
          <echo>Compilation?Complete?!</echo>
          ??
          </target>
          ??
          ??
          <target?name="war"?>
          ????
          <jar?jarfile="${dist}/JSPBook.war"?basedir="."/>
          ??
          </target>

          </project>
          ???
          也許你已經看出來了,這就是〈〈jsp2.0技術手冊〉〉里面的build.xml文件啦!
          posted on 2006-08-31 11:42 小言身寸 閱讀(774) 評論(0)  編輯  收藏 所屬分類: JAVA相關技術
          主站蜘蛛池模板: 敦煌市| 嵩明县| 江永县| 宣汉县| 宿州市| 云和县| 政和县| 上犹县| 金溪县| 河北区| 吐鲁番市| 琼结县| 昭通市| 东乡县| 怀安县| 百色市| 松江区| 洛南县| 湘阴县| 崇礼县| 揭西县| 凤庆县| 方山县| 屯昌县| 新源县| 如皋市| 淄博市| 普安县| 乌恰县| 长治县| 无极县| 和林格尔县| 亚东县| 子长县| 青海省| 陈巴尔虎旗| 濉溪县| 洪洞县| 榕江县| 宜城市| 沧源|