StrutsTest:
http://strutstestcase.sourceforge.net/
StrutsTestCase: The tool for Struts unit testing:
http://sourceforge.net/docman/display_doc.php?docid=19672&group_id=39190
EasyMock使用手冊:
http://dev.csdn.net/Develop/article/article/28/article/28/article/28/article/28/28583.shtm
??? Struts是目前在web開發中廣泛使用的幾個框架之一,而StrutsTest正是專門負責測試strut應用程序的Mock測試框架。
使用目的
?????? StrtusTest
是
junit
的擴展,使用它,不需要啟動
servlet
容器就可以方便的測試
struts
應用程序(容器外測試)。它也是屬于使用
Mock
對象測試,但是與
EasyMock
不同的是,
EasyMock
是提供了創建
Mock
對象的
API
,而
StrutsTest
則是專門負責測試
Struts
應用程序的
Mock
對象測試框架。除了容器外測試,
StrutsTest
也可以很方便的用容器內的測試。
??????
當前的版本是
StrutsTest2.1.0
,在這個版本中不支持
Struts1.0
。如果需要測試
struts1.0
的應用程序,對應的版本是
StrutsTest2.0
。可以從
http://sourceforge.net/projects/strutstestcase/
下載。
用法
1.
??????
基本步驟:
-
?????????
書寫
struts action
。
-
?????????
確定需要進行測試的方式:
Mock
對象則選用
MockStrutsTestCase
作為基類;
Cactus
方式則選用
CactusStrutsTestCase
;這兩種方式以下的步驟都是一樣的。
-
?????????
使用
setUp
和
tearDown
進行初始化,明確這兩個函數的第一句話是調用
super
的方法。
-
?????????
設置要測試的
struts action
的路徑,方便
strutstest
能找到
web.xml
和
struts
相關的配置文檔。
-
?????????
設置
action
在
strtus-config.xml
中對應的
path
名稱。
-
?????????
設置
action
需要使用的各個參數值到
request
對象中,包括
action
所使用的
formbean
的值。
-
?????????
執行
action
。
-
?????????
驗證
action
的返回路徑是否正確,即
forward
的名字。
-
?????????
驗證
action
相關的其余部分。
2.
??????
使用例子(采用
Mock
方式):
public class DeparmentDBActionTest extends MockStrutsTestCase {
??? public DeparmentDBActionTest(String arg0) {
???
??
??
super(arg0);
??? }
public void setUp(){
??????
?
super.setUp();
//
指明
web
應用的根
???
????File contextFile = new File("D:\\Projects\\fog\\implement\\web");
??????? setContextDirectory(contextFile);
??? }
??? protected void tearDown() throws Exception {
???????
super.tearDown();
??? }
??? public void testDoAdd() {
??????? //
設置
action
的
path
??????? setRequestPathInfo("/dpEdit");
??????? //
準備
action
所需要的
formbean
的參數
??????? addRequestParameter("method", "doAdd");
??????? addRequestParameter("pageId", "1");
??????? addRequestParameter("dpname","
測試部門
");
??????? addRequestParameter("dptype","
測試部門
");
??????? addRequestParameter("yn","n");
??????? //
執行
action
??????? actionPerform();
??????? //
驗證返回的
forward
??????? verifyForward("success");
??? }
3.
??????
主要函數和作用:
-
?????????
setContextDirectory
,設置
web
應用的根
-
?????????
setRequestPathInfo
,設置
request
的請求
-
?????????
addRequestParameter
,將參數和對應的值加入
request
中
-
?????????
actionPerform
,執行這個請求
-
?????????
verifyForward
,驗證
forward
的名字是否正確
-
?????????
verifyForwardPath
,驗證
forward
的
path
是否正確
-
?????????
verifyNoActionErrors
,驗證在
action
執行過程中沒有
ActionError
產生
-
?????????
verifyActionErrors
,驗證在
action
執行過程中產生的
ActionError
集合的內容
具體詳細的內容請參見對應的
javaDoc
。
4.
??????
測試
Tile
。其基本過程與上面類似,不同之處在于驗證:使用
verifyTilesForward
和
verifyInputTilesForward
。
5.
??????
測試子模塊。其基本過程也和上面一樣,不同之處在于需要指定該模塊所需要使用的
struts-config.xml
和調用方式:
-
?????????
首先,指定所需要的
struts-config.xml
:
setConfigFile("mymodule","/WEB-INF/struts-config-mymodule.xml");
-
?????????
其次,指明調用的路徑:
setRequestPathInfo("/mymodule","/login.do");
檢查表
??????
使用
StrutsTest
需要注意的地方:
-
?????????
在
TestCase
中可以訪問
request
、
session
等對象,
StrutsTest
為我們提供了訪問接口。
-
?????????
junit
的
assert
函數和
fail
函數都可以在
StrutsTest
中使用。
-?
對于文件上載,目前
StrutsTest
并沒有什么特別好的方案。具體參見
StrusTest
的
Faq
。