按照官網的定義,我們就可以用MILY: 'Arial','sans-serif'; FONT-SIZE: 10.5pt" lang=EN-US>cactus和JUnit一起來完成對上述servlet的測試了。
首先,我們來建一個web項目,我定義的名稱為cactustest;再把下載下來的cactus解壓,把cactus-1.7.2\lib中的jar包復制到WebRoot\WEB-INF\lib下,也可以建立自己的用戶庫,方便以后的項目使用。搭建好環境后,接下來就可以寫上面程序的測試類啦,讓我們來用cactus為上面的程序寫一個測試類,測試類代碼為:
package com.test.servlet;
import org.apache.cactus.ServletTestCase;
import org.apache.cactus.WebRequest;
public class LoginServletCactusTest extends ServletTestCase {
//先來個正確的測試用例
//分別為username和password賦值
public void beginLoginUser(WebRequest webRequest) {
webRequest.addParameter("username", "cuckoo");
webRequest.addParameter("password", "123");
}
//使用assertTrue方法斷言,如果正確返回true
public void testLoginUser() {
LoginServlet loginServlet = new LoginServlet();
assertTrue(loginServlet.loginUser(request));
}
//再來個錯誤的測試用例
//分別為username和password賦值
public void beginInLoginUser(WebRequest webRequest) {
webRequest.addParameter("username", "guest");
webRequest.addParameter("password", "123456");
}
//使用assertFalse方法斷言,如果錯誤返回true
public void testInLoginUser() {
LoginServlet loginServlet = new LoginServlet();
assertFalse(loginServlet.loginUser(request));
}
}
這樣,測試類就搞定了,
下圖是我的項目結構如下圖:

OK,現在就可以啟動tomcat了,部署成功后在地址欄上輸入http://localhost:8080/cactustest/ServletTestRunner?suite=com.test.servlet.LoginServletCactusTest 回車,你將會看到讓自己感到高興的結果,此種方式是以XML形式輸出測試結果,如下圖:

還可以用cactus自定義的的樣式表的方式輸出測試結果,只需要把cactus自帶的cactus-report.xsl文件加入到webroot目錄下就可以了,在地址欄上輸入http://localhost:8080/cactustest/ServletTestRunner?suite=com.test.servlet.LoginServletCactusTest&xsl=cactus-report.xsl 回車,這種形式的輸出比較美觀,如下圖所示:

到這里,一個單獨用JUnit不能完成的測試用上cactus就搞定了,或許我們會感覺高興下,從技術上我們是實現了用JUnit加cactus對servlet的測試,但細心的你是否已經發現了其中的不便之處,就是每次對一個servlet測試前都要啟動tomcat,這樣大大增加了測試時間,也可能影響項目進度。有沒有什么方法可以解決這個問題呢?細心的你可能已經發現,在我的項目結構圖上,已經有一個LoginServletJettyTest.java類。是的,這個就是為了解決上面問題而用的另一種框架,它就是Jetty。它運行測試servlet就像用JUnit測試普通java類一樣那么簡單,不需要啟動tomcat。
在這里我們可以使用Jetty 它的下載地址為 http://jetty.mortbay.org/jetty/index.html ,它是個Java編寫的HTTP服務器,本身也是個Container,Cactus集成了Jetty,并提供與測試相關的簡便類別。
使用Cactus+Jetty執行測試,在更大的程度上隱藏了測試運行過程的細節,您不必關心Redirector Proxy,更不一定要關心TestCase在客戶端與服務器端的行為,運行起來就如同在運作一個JUnit測試。
在WebRoot\WEB-INF\lib原來的基礎上加入cactus.core.framework.uberjar.javaEE.14-1.8.1.jar就行了.
未完,下篇 用cactus,jetty實現對servlet類進行單元測試三 繼續……