rocket
走在agile的小路上
BlogJava
首页
新随笔
联系
聚合
管理
随笔-55 评论-200 文章-0 trackbacks-0
Spring+hibernate 单元测试框架总结
这两天的花费了一些时间在使用spring-mock进行spring的单元测试问题上,基本上对这个问题有了一个完整的解决方案
下面将对相关学习到和思考到的一些问题进行一下整理:
1、首先明确一下问题:要对什么进行单元测试?
我的问题是围绕这一个DAO展开,我定义了一个DAO接口XXXDAO,并且写了该DAO的实现XXXDAOImpl,然后使用spring对接口的实现进行管理:
<
bean
id
="XXXDAO"
class
="com.easou.datastat.base.dao.impl.XXXDAOImpl"
>
<
property
name
="sessionFactory"
>
<
ref
bean
="sessionFactory"
/>
</
property
>
<
property
name
="hibernateTemplate"
>
<
ref
bean
="hibernateTemplate"
/>
</
property
>
</
bean
>
现在问题开始明确了,我要对XXXDAOImpl进行单元测试。这里需要指明一个问题就是单元测试,测试的是有实现代码的实现类,而不是接口。
2、接着是下一个问题,如何取得Sping的上下文关系呢?
这里就需要用到spring-mock了,其中有一个测试基类是AbstractTransactionalDataSourceSpringContextTests
我让测试用例XXXDAOImplTestcase继承AbstractTransactionalDataSourceSpringContextTests,然后override其中的方法getConfigLocations()
具体代码如下:
public
class
XXXDAOImplTestCase
extends
AbstractTransactionalDataSourceSpringContextTests
{
@Override
protected
String[] getConfigLocations()
{
//
TODO get the spring context
String[] config
=
new
String[]
{
"
file:D:\\javawork\\workspace\\datastat\\docroot\\WEB-INF\\applicationContext.xml
"
,
"
file:D:\\javawork\\workspace\\datastat\\docroot\\WEB-INF\\applicationContext-base.xml
"
}
;
return
config;
}
}
不难看出,该方法是为了读入spring的上下文信息,这样的话这个测试用例就可以直接使用spirng中定义的bean了
但是这里需要注意一个问题*,就是文件路径的问题,这里为了能够清楚地说明文件的路径规则我引用了spring-mock官方的getConfigLocation方法说明
Subclasses must implement this method to return the locations of their config files. A plain path will be treated as class path location. E.g.: "org/springframework/whatever/foo.xml". Note however that you may prefix path locations with standard Spring resource prefixes. Therefore, a config location path prefixed with "classpath:" with behave the same as a plain path, but a config location such as "file:/some/path/path/location/appContext.xml" will be treated as a filesystem location.
3 好了,该到最后一个问题了,取得Spirng上下问中定义的bean的实例来进行单元测试
这里有两种方法,一种是定义一个代测单元的对象,然后定义好get,set方法,AbstractTransactionalDataSourceSpringContextTests会自动根据Spring的上下文得到待测单元的具体实现。
private
ExQueryDAO exQqueryDAO;
/** */
/**
*
@return
返回 exQqueryDAO。
*/
public
ExQueryDAO getExQqueryDAO()
{
return
exQqueryDAO;
}
/** */
/**
*
@param
exQqueryDAO 要设置的 exQqueryDAO。
*/
public
void
setExQqueryDAO(ExQueryDAO exQqueryDAO)
{
this
.exQqueryDAO
=
exQqueryDAO;
}
另外一种就是使用applicationContext.getBean("XXXDAO");的方法取得实例
XXXDAO xxxDAO = (XXXDAO)applicationContext.getBean("XXXDAO");
接下来你就可以用这个bean的具体实现对相关方法进行unittest了
这里补充一个问题就是单元测试的运行环境问题*,由于你可能在spring的配置文件中指定一些外部类所以你必须在junit的运行环境中指定使用到的classpath,下面是eclipse的junit配置classpath
最后我对整体的spring+hibernate的jsf框架进行了一下单元测试的框架总结,主要多了一个基本的BaseTestCase,用于统一读取applicationContext
可以看到下面的pagebean和jsp页面以及相关的taglib的单元测试我还没有完成:),我将在今后几天继续研究相关的单元测试问题
posted on 2006-08-25 00:29
rocket
阅读(3863)
评论(4)
编辑
收藏
评论:
#
re: Spring+hibernate 单元测试框架总结 2006-08-25 08:55 |
sjun
不错,画的测试图把测试过程描述得很清晰,顶一下!
回复
更多评论
#
re: Spring+hibernate 单元测试框架总结[未登录] 2007-06-13 20:08 |
Jack
rocket 支持你。
回复
更多评论
#
re: Spring+hibernate 单元测试框架总结 2007-09-25 11:43 |
cocin0923@sina.com.cn
不错,图画的不错,一下就知道是咋回事了
回复
更多评论
#
re: Spring+hibernate 单元测试框架总结
2007-11-17 15:25 |
汪保杰(Jack)
管理与技术群
47763528
请快加入,要满了!
回复
更多评论
新用户注册
刷新评论列表
IT新闻:
·
谷歌“身后事”:屏蔽.com不只是个传说?
·
腾讯今年招聘近3000人 员工总数将突破1万人
·
中国互联网江湖一窥:IT第一记者刘韧入狱记
·
9大IT科技公司总部览
·
五个广泛流传的对大龄程序员的误解
专题:
Android
iPad
jQuery
Chrome OS
博客园首页
IT新闻
知识库
学英语
Java程序员招聘
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
[使用Ctrl+Enter键可以直接提交]
每天10分钟,轻松学英语
推荐职位:
·
飞信服务器端高级.NET开发工程师(新媒传信)
·
.NET飞信官网开发工程师(新媒传信)
·
.NET技术开发总监(广州衣酷)
·
ASP.NET资深工程师 (盛大网络)
·
.NET初级程序员 (北京安人)
·
.NET中级程序员 (北京安人)
·
中高级.NET工程师(沪江网)
·
前端开发工程师(沪江网)
博客园首页随笔:
·
谷歌中国"风平浪静"食堂排队吃饭 吊床花篮犹在
·
[译].Google Chrome extensions(实验室).界面.浏览器动作
·
Visual Studio 2010 Ultimate测试体系结构
·
技术、业务、市场
·
在工作组中安装和配置Hyper-V R2
知识库:
·
五个广泛流传的对大龄程序员的误解
·
有感于“研发人员的个人培养和组织培养”
·
SQL vs NoSQL:数据库并发写入性能比拼
·
让敏捷与“以用户为中心的设计”和谐共生
·
Apple、Google 之战渐显个人色彩
网站导航:
博客园
IT新闻
个人主页
博客生活
IT博客网
C++博客
博客园社区
管理
Dict.CN 在线词典, 英语学习, 在线翻译
QQ:19794405
agilelife分享群:59765983
QQ上少了,请大家加入msn group:
agilelife@groups.msn.com
敏捷项目实践经验分享
TDD,重构,迭代,结对
<
2006年8月
>
日
一
二
三
四
五
六
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
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(6)
给我留言
查看公开留言
查看私人留言
我参与的团队
深圳Java俱乐部(0/0)
随笔分类
(15)
UI相关
好文翻译(1)
常用框架(1)
敏捷方法(4)
数据库相关
构架设计(2)
经验积累(3)
项目管理(4)
随笔档案
(55)
2008年12月 (1)
2008年7月 (2)
2008年5月 (8)
2008年3月 (1)
2008年2月 (4)
2007年10月 (1)
2007年9月 (4)
2007年7月 (3)
2007年5月 (2)
2007年4月 (6)
2007年3月 (5)
2007年2月 (2)
2007年1月 (3)
2006年11月 (3)
2006年10月 (1)
2006年8月 (1)
2006年7月 (1)
2006年5月 (2)
2006年4月 (2)
2006年3月 (3)
相册
rocket
搜索
积分与排名
积分 - 82234
排名 - 181
最新评论
1. re: 找了一天的jsp格式化工具,最后还是用回workshop[未登录]
COPY到dreamwaver ,会麻烦点但没有办法 .
--林
2. re: dwr reverse-ajax 实例解析
评论内容较长,点击标题查看
--benson
3. re: roller扩展开发经验小结之xmlrpc
评论内容较长,点击标题查看
--猪
4. re: agile+手机搜索 home.easou.com[未登录]
怎么下载到手机啊
有游戏没
--老妖
5. re: agile+手机搜索 home.easou.com
用手机上该网址收费吗
--赵玉
阅读排行榜
1. 一个新java web项目入手过程总结(5156)
2. 招聘java程序员,系统架构师(4073)
3. Spring+hibernate 单元测试框架总结(3863)
4. dwr reverse-ajax 实例解析(3299)
5. 一个以前没有注意的问题:java构造函数的执行顺序(3075)
评论排行榜
1. 不仁义,不仗义(24)
2. 招聘java程序员,系统架构师(20)
3. dwr reverse-ajax 实例解析(11)
4. 单元测试究竟是测试什么?(9)
5. 关于workshop(原nitrox m7)的utf-8中文乱码问题解决(8)