.№爱の冰封
开始懂得逢场作戏,虽然有许多只是雾水情缘; 不过没关系了,哪来那么多一生一世
BlogJava
首页
新随笔
联系
聚合
管理
posts - 14, comments - 37, trackbacks - 0
JUnit Gossip: 第一个 Cactus + Jetty 测试
在Tomcat或您的目标Container上直接执行测试的好处是,您即完成了单元测试,也测试了您的单元与 Container的交互,然而比较麻烦的是,您必须在每一次的修改之後,重新布署相关的资源、启动Container、运行测试等等,测试时较为耗时耗力。
对於简单的In-Container单元测试,您可以使用stub的方式,stub即将真实系统的一部份引入您的程式之中,让您的程式可以与这一个部份进行交互,而不一定要将整个程式置於系统之中。
stub的好处是,有时您并不是要测试程式与整个系统的行为,并且您也不是每次都可以将程式丢到系统之上运行,试想,您不能为了测试您的单元,而要求真正在服务客户的系统不断的重启。
对於In-Container测试采取stub的方式,自然就是实现Container的部份功能,并将测试置於其中,在这边您可以使用 Jetty [http://jetty.mortbay.org/jetty/index.html],它是个Java撰写的HTTP伺服器,本身也是个 Container,Cactus集成了Jetty,并提供与测试相关的简便类别。
使用Cactus+Jetty执行测试,在更大的程度上隐藏了测试运行过程的细节,您不必关心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)
如您所看到的,整个测试过程相当的简易,Cactus+Jetty隐藏了更多的细节,您测试的行为几乎与只使用JUnit时是一致的。
posted on 2007-07-10 10:19
冰封的爱
阅读(298)
评论(0)
编辑
收藏
所属分类:
J2EE
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
java日期操作 及 Timer定时器
大型B/S系统的并发问题
定义一个内部类的比较器,比较两个对象并且进行排序
Spring+hibernate+DWR整合
获得汉字拼音首字母(java版)
根据拼音首字母查询人名(C#版)
java开源项目
在 Java 应用程序中计划重复执行的任务(转)
如何使用ejb3持久化中callback
EJB3 QL查询
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
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
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: 根据拼音首字母查询人名(C#版)[未登录]
好用,谢谢
--123
3. re: java中生成32位随机ID [未登录]
手术
--想
4. re: Jocky混淆JAVA代码(保护你的JAVA项目)
求支持 JDK 1.7的版本
--pro
5. re: Jocky混淆JAVA代码(保护你的JAVA项目)
8530
--ss
阅读排行榜
1. 学会放下(640)
2. 项目人生(392)
3. IT外包值得体验(389)
4. 小型软件公司如何做大(383)
5. 2007年7月每日一句汇总(1)(354)
评论排行榜
1. 学会放下(0)
2. 2007年7月份 每日一句汇总(2)(0)
3. 2007年7月每日一句汇总(1)(0)
4. 英语每日一句(0)
5. IT外包值得体验(0)