.№愛の冰封
開始懂得逢場作戲,雖然有許多只是霧水情緣; 不過沒關(guān)系了,哪來那么多一生一世
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
posts - 14, comments - 37, trackbacks - 0
JUnit Gossip: 第一個 Cactus + Jetty 測試
在Tomcat或您的目標(biāo)Container上直接執(zhí)行測試的好處是,您即完成了單元測試,也測試了您的單元與 Container的交互,然而比較麻煩的是,您必須在每一次的修改之後,重新布署相關(guān)的資源、啟動Container、運行測試等等,測試時較為耗時耗力。
對於簡單的In-Container單元測試,您可以使用stub的方式,stub即將真實系統(tǒng)的一部份引入您的程式之中,讓您的程式可以與這一個部份進(jìn)行交互,而不一定要將整個程式置於系統(tǒng)之中。
stub的好處是,有時您并不是要測試程式與整個系統(tǒng)的行為,并且您也不是每次都可以將程式丟到系統(tǒng)之上運行,試想,您不能為了測試您的單元,而要求真正在服務(wù)客戶的系統(tǒng)不斷的重啟。
對於In-Container測試采取stub的方式,自然就是實現(xiàn)Container的部份功能,并將測試置於其中,在這邊您可以使用 Jetty [http://jetty.mortbay.org/jetty/index.html],它是個Java撰寫的HTTP伺服器,本身也是個 Container,Cactus集成了Jetty,并提供與測試相關(guān)的簡便類別。
使用Cactus+Jetty執(zhí)行測試,在更大的程度上隱藏了測試運行過程的細(xì)節(jié),您不必關(guān)心Redirector Proxy,更不一定要關(guān)心TestCase在客戶端與伺服端的行為,運行起來就如同在運作一個JUnit測試。
使用Cactus+Jetty進(jìn)行測試時,Jetty會在測試開始前完成啟動,接著進(jìn)行相關(guān)測試,然後Jetty會自動關(guān)閉,這很方便,另一方面,啟動 Jetty會快的多了。
要使用Cactus+Jetty,請將Cactus下載後的lib目錄中的commons-logging-xxx.jar、 aspectjrt-xxx.jar、cactus-xxx.jar、commons-httpclient-xxx.jar、junit- xxx.jar以及org.mortbay.jetty-xxx.jar設(shè)定至CLASSPATH。
接著撰寫測試案例:
LoginServletTest.java
1
package
onlyfun.caterpillar.test;
2
3
import
junit.framework.Test;
4
import
junit.framework.TestSuite;
5
import
org.apache.cactus.ServletTestCase;
6
import
org.apache.cactus.WebRequest;
7
import
org.apache.cactus.extension.jetty.JettyTestSetup;
8
import
onlyfun.caterpillar.LoginServlet;
9
10
public
class
LoginServletTest
extends
ServletTestCase
11
{
12
public
static
Test suite()
13
{
14
System.setProperty(
"
cactus.contextURL
"
,
"
http://localhost:8080/cactusDemo
"
);
15
TestSuite suite
=
new
TestSuite();
16
suite.addTestSuite(LoginServletTest.
class
);
17
return
new
JettyTestSetup(suite);
18
}
19
20
public
void
beginValidUser(WebRequest webRequest)
21
{
22
webRequest.addParameter(
"
username
"
,
"
justin
"
);
23
webRequest.addParameter(
"
password
"
,
"
123456
"
);
24
}
25
26
public
void
testValidUser()
27
{
28
LoginServlet loginServlet
=
new
LoginServlet();
29
assertTrue(loginServlet.isValidUser(request));
30
}
31
32
public
void
beginInValidUser(WebRequest webRequest)
33
{
34
webRequest.addParameter(
"
username
"
,
"
guest
"
);
35
webRequest.addParameter(
"
password
"
,
"
123456
"
);
36
}
37
38
public
void
testInValidUser()
39
{
40
LoginServlet loginServlet
=
new
LoginServlet();
41
assertFalse(loginServlet.isValidUser(request));
42
}
43
44
public
static
void
main(String[] args)
45
{
46
junit.textui.TestRunner.run(LoginServletTest.suite());
47
}
48
}
49
在這邊要特別注意的是suite()方法,傳回了一個JettyTestSetup實例,如您所想的,這個實例除了運行TestSuite之外,它還會啟動Jetty。接下來依測試案例來完成程式:
LoginServlet.java
1
package
onlyfun.caterpillar;
2
3
import
javax.servlet.http.
*
;
4
5
public
class
LoginServlet
extends
HttpServlet
6
{
7
public
boolean
isValidUser(HttpServletRequest request)
8
{
9
String username
=
request.getParameter(
"
username
"
);
10
String password
=
request.getParameter(
"
password
"
);
11
if
(username
==
null
||
password
==
null
||
!
username.equals(
"
justin
"
)
12
||
!
password.equals(
"
123456
"
))
13
{
14
return
false
;
15
}
16
else
17
{
18
return
true
;
19
}
20
}
21
}
22
然後就可以運行測試了,以下是測試的結(jié)果:
1
09
:
26
:
10.625
EVENT Starting Jetty/
4.2.17
2
09
:
26
:
10.843
EVENT Started ServletHttpContext
[
/cactusDemo
]
3
09
:
26
:
39.203
EVENT Started SocketListener on
0.0.0.0
:
8080
4
09
:
26
:
39.203
EVENT Started org.mortbay.jetty.Server@758fc9
5
.
.09
:
26
:
40.296
EVENT Stopping Acceptor
6
ServerSocket
[
addr=0.0.0.0/0.0.0.0,port=0,localport=8080
]
7
09
:
26
:
40.296
EVENT Stopped SocketListener on
0.0.0.0
:
8080
8
09
:
26
:
40.296
EVENT Stopped ServletHttpContext
[
/cactusDemo
]
9
09
:
26
:
40.296
EVENT Stopped org.mortbay.jetty.Server@758fc9
10
11
Time:
31.453
12
13
OK (
2
tests)
如您所看到的,整個測試過程相當(dāng)?shù)暮喴?,Cactus+Jetty隱藏了更多的細(xì)節(jié),您測試的行為幾乎與只使用JUnit時是一致的。
posted on 2007-07-10 10:19
冰封的愛
閱讀(301)
評論(0)
編輯
收藏
所屬分類:
J2EE
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
java日期操作 及 Timer定時器
大型B/S系統(tǒng)的并發(fā)問題
定義一個內(nèi)部類的比較器,比較兩個對象并且進(jìn)行排序
Spring+hibernate+DWR整合
獲得漢字拼音首字母(java版)
根據(jù)拼音首字母查詢?nèi)嗣?C#版)
java開源項目
在 Java 應(yīng)用程序中計劃重復(fù)執(zhí)行的任務(wù)(轉(zhuǎn))
如何使用ejb3持久化中callback
EJB3 QL查詢
Copyright ©2025 冰封的愛 Powered By:
博客園
模板提供:
滬江博客
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(3)
給我留言
查看公開留言
查看私人留言
隨筆檔案
2007年9月 (1)
2007年8月 (6)
2007年7月 (3)
2007年6月 (3)
文章分類
J2EE(64)
Linux(8)
常用工具(9)
開源項目(3)
技術(shù)(9)
文章檔案
2009年1月 (1)
2008年4月 (1)
2008年1月 (1)
2007年10月 (2)
2007年9月 (2)
2007年8月 (1)
2007年7月 (73)
2007年6月 (12)
相冊
冰封的相冊
搜索
最新評論
1.?re: 自動生成32位永不重復(fù)ID
444
--22
2.?re: 根據(jù)拼音首字母查詢?nèi)嗣?C#版)[未登錄]
好用,謝謝
--123
3.?re: java中生成32位隨機ID [未登錄]
手術(shù)
--想
4.?re: Jocky混淆JAVA代碼(保護你的JAVA項目)
求支持 JDK 1.7的版本
--pro
5.?re: Jocky混淆JAVA代碼(保護你的JAVA項目)
8530
--ss
閱讀排行榜
1.?學(xué)會放下(655)
2.?項目人生(401)
3.?IT外包值得體驗(400)
4.?小型軟件公司如何做大(393)
5.?2007年7月每日一句匯總(1)(364)
評論排行榜
1.?學(xué)會放下(0)
2.?2007年7月份 每日一句匯總(2)(0)
3.?2007年7月每日一句匯總(1)(0)
4.?英語每日一句(0)
5.?IT外包值得體驗(0)
主站蜘蛛池模板:
免费人成在线观看播放国产
|
亚洲成_人网站图片
|
亚洲黄色免费观看
|
亚洲AV无码资源在线观看
|
中国一级毛片免费看视频
|
国产精品久久久久免费a∨
|
亚洲中文字幕无码久久精品1
|
在线看免费观看AV深夜影院
|
精品国产亚洲男女在线线电影
|
蜜桃传媒一区二区亚洲AV
|
国产精品亚洲一区二区三区在线
|
成人免费无码大片a毛片
|
麻豆亚洲av熟女国产一区二
|
免费高清在线影片一区
|
亚洲制服在线观看
|
久爱免费观看在线网站
|
亚洲AV无码国产精品麻豆天美
|
av网站免费线看
|
亚洲成人国产精品
|
青草青草视频2免费观看
|
日本高清免费aaaaa大片视频
|
亚洲kkk4444在线观看
|
亚洲亚洲人成综合网络
|
国产羞羞的视频在线观看免费
|
亚洲人成网站在线观看播放
|
成人免费视频88
|
亚欧免费一级毛片
|
亚洲人成在线中文字幕
|
在线a亚洲v天堂网2019无码
|
全免费一级毛片在线播放
|
性无码免费一区二区三区在线
|
特级毛片A级毛片免费播放
|
亚洲综合校园春色
|
国内自产拍自a免费毛片
|
免费看又黄又爽又猛的视频软件
|
97人妻精品全国免费视频
|
久久久久亚洲精品影视
|
精品国产sm捆绑最大网免费站
|
激情综合亚洲色婷婷五月APP
|
亚洲性猛交xx乱
|
蜜桃精品免费久久久久影院
|