.№愛の冰封
開始懂得逢場作戲,雖然有許多只是霧水情緣; 不過沒關系了,哪來那么多一生一世
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)
主站蜘蛛池模板:
日韩一级视频免费观看
|
久久A级毛片免费观看
|
全免费一级毛片在线播放
|
日产亚洲一区二区三区
|
日韩电影免费在线观看中文字幕
|
亚洲国产美女精品久久久久∴
|
久久WWW免费人成—看片
|
久久久久国产成人精品亚洲午夜
|
亚洲a级成人片在线观看
|
18成禁人视频免费网站
|
亚洲国产综合自在线另类
|
永久黄色免费网站
|
亚洲国产精品成人综合久久久
|
亚洲国产精品无码久久久不卡
|
亚洲熟妇无码八V在线播放
|
野花高清在线观看免费完整版中文
|
亚洲剧场午夜在线观看
|
免费特级黄毛片在线成人观看
|
亚洲s码欧洲m码吹潮
|
亚洲狠狠爱综合影院婷婷
|
a级在线观看免费
|
亚洲综合激情九月婷婷
|
啦啦啦手机完整免费高清观看
|
无码一区二区三区亚洲人妻
|
亚洲精品国产电影
|
无码午夜成人1000部免费视频
|
亚洲中文字幕久在线
|
亚洲第一福利网站在线观看
|
久久久免费的精品
|
亚洲精品伊人久久久久
|
国产精品国产自线拍免费软件
|
国产综合免费精品久久久
|
78成人精品电影在线播放日韩精品电影一区亚洲
|
在线观看免费大黄网站
|
男人免费视频一区二区在线观看
|
久久91亚洲人成电影网站
|
91精品成人免费国产片
|
国产亚洲视频在线观看
|
水蜜桃亚洲一二三四在线
|
日韩高清在线高清免费
|
99在线免费观看视频
|