.№愛の冰封
開始懂得逢場作戲,雖然有許多只是霧水情緣; 不過沒關系了,哪來那么多一生一世
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
posts - 14, comments - 37, trackbacks - 0
JUnit Gossip: 第一個 Cactus + Jetty 測試
在Tomcat或您的目標Container上直接執(zhí)行測試的好處是,您即完成了單元測試,也測試了您的單元與 Container的交互,然而比較麻煩的是,您必須在每一次的修改之後,重新布署相關的資源、啟動Container、運行測試等等,測試時較為耗時耗力。
對於簡單的In-Container單元測試,您可以使用stub的方式,stub即將真實系統(tǒng)的一部份引入您的程式之中,讓您的程式可以與這一個部份進行交互,而不一定要將整個程式置於系統(tǒng)之中。
stub的好處是,有時您并不是要測試程式與整個系統(tǒng)的行為,并且您也不是每次都可以將程式丟到系統(tǒng)之上運行,試想,您不能為了測試您的單元,而要求真正在服務客戶的系統(tǒng)不斷的重啟。
對於In-Container測試采取stub的方式,自然就是實現(xiàn)Container的部份功能,并將測試置於其中,在這邊您可以使用 Jetty [http://jetty.mortbay.org/jetty/index.html],它是個Java撰寫的HTTP伺服器,本身也是個 Container,Cactus集成了Jetty,并提供與測試相關的簡便類別。
使用Cactus+Jetty執(zhí)行測試,在更大的程度上隱藏了測試運行過程的細節(jié),您不必關心Redirector Proxy,更不一定要關心TestCase在客戶端與伺服端的行為,運行起來就如同在運作一個JUnit測試。
使用Cactus+Jetty進行測試時,Jetty會在測試開始前完成啟動,接著進行相關測試,然後Jetty會自動關閉,這很方便,另一方面,啟動 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設定至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
然後就可以運行測試了,以下是測試的結果:
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)
如您所看到的,整個測試過程相當?shù)暮喴祝珻actus+Jetty隱藏了更多的細節(jié),您測試的行為幾乎與只使用JUnit時是一致的。
posted on 2007-07-10 10:19
冰封的愛
閱讀(300)
評論(0)
編輯
收藏
所屬分類:
J2EE
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
java日期操作 及 Timer定時器
大型B/S系統(tǒng)的并發(fā)問題
定義一個內(nèi)部類的比較器,比較兩個對象并且進行排序
Spring+hibernate+DWR整合
獲得漢字拼音首字母(java版)
根據(jù)拼音首字母查詢?nèi)嗣?C#版)
java開源項目
在 Java 應用程序中計劃重復執(zhí)行的任務(轉)
如何使用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)
技術(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位永不重復ID
444
--22
2.?re: 根據(jù)拼音首字母查詢?nèi)嗣?C#版)[未登錄]
好用,謝謝
--123
3.?re: java中生成32位隨機ID [未登錄]
手術
--想
4.?re: Jocky混淆JAVA代碼(保護你的JAVA項目)
求支持 JDK 1.7的版本
--pro
5.?re: Jocky混淆JAVA代碼(保護你的JAVA項目)
8530
--ss
閱讀排行榜
1.?學會放下(654)
2.?項目人生(401)
3.?IT外包值得體驗(398)
4.?小型軟件公司如何做大(391)
5.?2007年7月每日一句匯總(1)(363)
評論排行榜
1.?學會放下(0)
2.?2007年7月份 每日一句匯總(2)(0)
3.?2007年7月每日一句匯總(1)(0)
4.?英語每日一句(0)
5.?IT外包值得體驗(0)
主站蜘蛛池模板:
日韩一级免费视频
|
AV大片在线无码永久免费
|
亚洲成av人片不卡无码久久
|
波多野结衣亚洲一级
|
国产免费不卡视频
|
亚洲va在线va天堂va手机
|
免费影院未满十八勿进网站
|
亚洲一级视频在线观看
|
成人免费无码大片A毛片抽搐
|
亚洲熟妇AV一区二区三区浪潮
|
99在线视频免费观看视频
|
国产亚洲精品AA片在线观看不加载
|
国产亚洲精品美女久久久久久下载
|
四虎影永久在线高清免费
|
美女被爆羞羞网站在免费观看
|
亚洲欧洲国产成人综合在线观看
|
一个人看的www视频免费在线观看
|
亚洲综合色婷婷七月丁香
|
国产精品免费一区二区三区四区
|
67pao强力打造67194在线午夜亚洲
|
久久受www免费人成_看片中文
|
亚洲日韩精品国产一区二区三区
|
免费国产一级特黄久久
|
久久久久久国产a免费观看不卡
|
99久久精品国产亚洲
|
妞干网在线免费观看
|
一级一看免费完整版毛片
|
亚洲AV无码精品色午夜在线观看
|
免费观看黄色的网站
|
色九月亚洲综合网
|
国产亚洲真人做受在线观看
|
黄色成人免费网站
|
亚洲黄片手机免费观看
|
亚洲高清日韩精品第一区
|
日本一道一区二区免费看
|
中文字幕一区二区免费
|
亚洲色欲色欲www
|
亚洲尤码不卡AV麻豆
|
青青久在线视频免费观看
|
两个人www免费高清视频
|
久久久久亚洲AV无码专区首JN
|