.№愛の冰封
開始懂得逢場作戲,雖然有許多只是霧水情緣; 不過沒關(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)
主站蜘蛛池模板:
亚洲国产成人久久
|
一个人看的hd免费视频
|
午夜小视频免费观看
|
日本永久免费a∨在线视频
|
亚洲熟妇无码八AV在线播放
|
在线成人爽a毛片免费软件
|
亚洲av无码专区在线电影
|
亚洲人成无码网站
|
最近最好的中文字幕2019免费
|
一区二区视频在线免费观看
|
亚洲五月六月丁香激情
|
国产免费无遮挡精品视频
|
久久精品国产大片免费观看
|
亚洲AV成人一区二区三区观看
|
亚洲乱码日产一区三区
|
狼友av永久网站免费观看
|
久久青草91免费观看
|
精品亚洲视频在线
|
亚洲高清免费在线观看
|
亚洲成a人片在线观看老师
|
免费A级毛片无码A∨免费
|
特a级免费高清黄色片
|
久久精品亚洲AV久久久无码
|
丝袜熟女国偷自产中文字幕亚洲
|
最近中文字幕无免费视频
|
国产日韩一区二区三免费高清
|
亚洲AV成人精品一区二区三区
|
亚洲狠狠久久综合一区77777
|
免费v片在线观看品善网
|
中文字幕无码播放免费
|
两个人看的www免费高清
|
无遮挡a级毛片免费看
|
亚洲日本国产综合高清
|
亚洲成人免费在线
|
亚洲日韩国产精品第一页一区
|
国产美女被遭强高潮免费网站
|
日本免费xxxx
|
在线免费观看亚洲
|
国产免费MV大全视频网站
|
免费的黄色网页在线免费观看
|
亚洲AV无码乱码麻豆精品国产
|