一、下載并解壓縮cactus
下載地址為http://java.chinaitlab.com/tools/45970.html。將cactus的lib目錄下的cactus-ant-1.7.1.jar復(fù)制到ant的lib目錄。
二、配置cactus
cactus的配置很簡單,新建一個cactus.properties文件,并把它放在ant腳本中的cactus任務(wù)的classpath下,文件中包括如下內(nèi)容
cactus.sysproperties=cactus.contextURL #cactus-sample-servlet-cactified是你的測試應(yīng)用所在路徑,8080是端口號 cactus.contextURL=http://localhost:8080/cactus-sample-servlet-cactifiedcactus.servletRedirectorName=ServletRedirector cactus.jspRedirectorName=JspRedirector cactus.filterRedirectorName=FilterRedirector
具體的做法結(jié)合ant腳本再進(jìn)一步解釋。
三、運(yùn)行ant腳本
ant腳本主要執(zhí)行以下任務(wù)
1、設(shè)定classpath
<path id="project.classpath"><fileset dir="${lib.dir}"><include name="*.jar"/></fileset><!--cactus.properties文件需要放在lib.dir所對應(yīng)的路徑中--><pathelement location="${lib.dir}"/><pathelement location="${tomcat.home}/common/lib/jsp-api.jar"/><pathelement location="${tomcat.home}/common/lib/servlet-api.jar"/></path>
2、定義相關(guān)任務(wù)
<taskdef resource="cactus.tasks"classpathref="project.classpath"/><taskdef name="runservertests"classname="org.apache.cactus.integration.ant.
RunServerTestsTask"><classpath><path refid="project.classpath"/></classpath></taskdef>
3、編譯應(yīng)用的類文件和測試的類文件
4、打包整個應(yīng)用為war文件
需要注意的是,不僅要打包應(yīng)用類,測試類也要打包
<target name="war"depends="compile.java"description="Generate the runtime war"><war warfile="${target.dir}/${project.name}.war"webxml="${src.webapp.dir}/WEB-INF/web.xml"><fileset dir="${src.webapp.dir}"><exclude name="cactus-report.xsl"/><exclude name="WEB-INF/cactus-web.xml"/><exclude name="WEB-INF/web.xml"/></fileset><classes dir="${target.classes.java.dir}"/><!--別忘了打包測試類--><classes dir="${target.classes.test.dir}"/><!--別忘了打包各種相關(guān)的jar文件--><lib dir="project.classpath"/></war></target>
5、在應(yīng)用的web.xml文件中添加測試所需的各種映射
cactus提供了兩個task來完成這個工作,CactifyWar和WebXmlMerge。
CactifyWar的功能是自動在已經(jīng)打包的應(yīng)用的web.xml文件中添加所需的映射。WebXmlMerge是提供合并兩個web.xml文件的功能。
<target name="test.prepare"depends="war, compile.cactus, test.prepare.logging"><!--Cactify the web-app archive--><cactifywar srcfile="${target.dir}/${project.name}.war"destfile="${tomcat.home}/webapps/${project.name}-cactified.war"><classes dir="${target.classes.java.dir}"/><classes dir="${target.classes.test.dir}"/><lib dir="project.classpath"/></cactifywar></target>
6、運(yùn)行測試
cactus提供了cactus和RunServerTests兩個task來運(yùn)行測試。
"cactus" task是通過復(fù)制容器服務(wù)器的小文件并運(yùn)行來運(yùn)行測試,因此需要制定容器服務(wù)器的類型,啟動速度稍快點(diǎn),另外配置比較方便,但是無法測試象tomcat連接池等資源。另外對tomcat5.5的支持也不好。
"RunServerTests"是通過直接啟動容器服務(wù)起來運(yùn)行測試,因此速度稍慢,且配置較麻煩,但能測試各種資源。
<target name="test"depends="test.prepare"description="Run tests on Tomcat"><!--Start the servlet engine, waitforit to be started, run the unit tests, stop the servlet engine, waitforit to be stopped. The servlet engineisstoppedifthe tests failforany reason--><!--8080是服務(wù)器的端口號,${project.name}-cactified是項(xiàng)目的路徑,和上一步的cactifywar 的destfile相對應(yīng)--><runservertests testURL="http://localhost:8080/${project.name}-cactified/ServletRedirector?Cactus_Service=RUN_TEST"startTarget="_StartTomcat"stopTarget="_StopTomcat"testTarget="_Test"/></target>
<!--_Test是一個普通的junit任務(wù)--><target name="_Test"><junit printsummary="yes"fork="yes"><classpath><path refid="project.classpath"/><pathelement location="${target.classes.java.dir}"/><pathelement location="${target.classes.test.dir}"/></classpath><formatter type="brief"usefile="false"/><formatter type="xml"/><batchtest><fileset dir="${src.test.dir}"><!--Due to some Cactus synchronization bug, the'unit'tests need
to run before the'sample'tests--><include name="**/Test*.java"/><exclude name="**/Test*All.java"/></fileset></batchtest></junit></target>