免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts2+Spring + hibernate 中对action的单元测试环境搭建 网上都说没有必要对action进行单元测试,但是有的项目中没有为了代码结构刻意去弄一个service层出来调用dao,而是在action中直接操作Dao层的函数,就我做的这个项目,搭建了一个对antion的单元测试。仅作为备忘。1.途中碰到的问题。 如何来测试action?网上给出的很多参考使用MockStrutsTestCase,而且还是对应struts1.x的。在apache上查看struts2的文档时候发现,有提供一个包struts2-junit-plugin-2.1.8.jar,里面有测试struts2.x中action的类StrutsSpringTestCase,可以用来测试ssh中的action。 如何来解决JPA中的lazy机制?大家知道,ssh集成后,hibernate的lazy机制成为让人头疼的问题,网上普遍有两种解决方案,在web.xml中使用spring提供的 OpenSessionInViewFilter来实现,还有一种是在application.xml中配置OpenSessionInViewFilter来实现。前者通用,后者只能用在springmvc结构中。 这里不再详细描述,详见网友blog(/zxq1406spys/archive/2009/10/30/4748283.aspx) 如何来做用户session管理?比如测试跟登陆用户身份信息相关的action。在StrutsSpringTestCase中有request属性,所以我们可以mock出session来代替网页请求的真实session。 2.上述问题解决以后,我们的单元测试环境就可以开始搭建了。 环境描述:Struts2 +Spring2.5 + hibernate3+ junit4 目的:对后台Action层的函数进行单元测试 需要的Jar包:junit4.jar(eclipse自带的,在项目路径中导入即可。“properties-Add Library-JUnit-JUnit4”) struts2-junit-plugin-2.1.8.jar 下面是基础代码代码 public class MessageActionTest extends StrutsSpringTestCase /*这个函数相当Before注解的函数,是调用单元测试后的时候, 首先会执行的方法。可以在这里面做一些必要的准备工作*/ Override protected void setUp() throws Exception super.setUp(); /*这个是单元测试的方法,一个方法测试一个功能,或者一个action*/ Test public void testGetReceiveMessage() throws Exception /*request是类StrutsSpringTestCase的成员变量, 是MockHttpServletRequest对象,在这里mock出来的一个web中的request*/ request.setParameter(userId, 1); /*我的环境中,返回值是json格式,result将是json格式的一个字符串 输入action的地址*/ String result = executeAction(/modules/train/messageAction!getReceiveMessage.action); /TODO:接下去可以对返回值做分析判断 解决问题jpa中lazy加载的问题,首先在setUp()函数中加入下述代码代码 SessionFactory sessionFactory = lookupSessionFactory(request); Session hibernateSession= getSession(sessionFactory); TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(hibernateSession);然后再类中加入下面两个私有函数代码 private Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException Session session = SessionFactoryUtils.getSession(sessionFactory, true); FlushMode flushMode = FlushMode.NEVER; if (flushMode != null) session.setFlushMode(flushMode); return session; private SessionFactory lookupSessionFactory(HttpServletRequest request) /“sessionFactory”是你spring配置文件(通常是application.xml)中的SessionFactory。 /如:org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean return (SessionFactory)this.applicationContext.getBean(sessionFactory);这样关于lazy加载的问题解决。其实这个时限还是参考了Spring中OpenSessionInViewFilter的。 首先,通过lookupSessionFactory()函数来获取这个测试环境中的org.hibernate.SessionFactory实体对象,其中的applicationContext是org.springframework.context.ApplicationContext的实现org.springframework.context.support.GenericApplicationContext,我们可以通过它的getBean方法来获取你配置文件中配置的SessionFactory。使用注解是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean,不需要使用注解的时候可以用org.springframework.orm.hibernate.LocalSessionFactoryBean来实现。 然后,在通过getSession()来获取其中的一个session,获取session的过程类似于java jdk 1.4以后的ThreadLocal类的实现方法,为每一个线程(用户的每一个request请求)提供一个“私有的”session实体类。关于ThreadLocal是干什么的,这里就不多讲了。所以我们在获取Session的时候,将这个session的FlushMode设置为FlushMode.NEVER,这样就可以让Spring来管理这个session,使得hibernate查询结束后,不会关闭session,从而解决lazy加载的问题。 最后,调用Spring提供的TransactionSynchronizationManager.bindResource()方法将session绑定到该请求的resources中,值得一提的是,其中的resources也是通过ThreadLocal来实现跟线程绑定的。关于实现web session的问题,很简单,该类提供了一个MockHttpServletRequest成员变量,我们只要mock一个session出来,然后加入到这个request中,就可以实现session的模拟了。示例代码如下:代码 HttpSession session = new MockHttpSession();String sessionId = UUID.randomUUID().toString();session.setAttribute(ConstParameter.USER_SESSION, sessionId);/user是一个用户信息的类,你可以根据你的需要自己定义UserInfor user = new UserInfo();user.setUserId(1);user.setName(xxx);session.setAttribute(ConstParameter.USER_INFO, user);request.setSession(session);这样,我们的单元测试功能就可以用了。注:在文中,需要加载spring配置文件信息,默认加载的路径是你项目的src目录下,文件名默认为“application.xml”,如果你的spring配置文件放在其它的目录下,或者文件的名字跟默认的不相符,那么你
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年郑州电力职业技术学院单招综合素质考试必刷测试卷含答案
- 2026年湖南现代物流职业技术学院单招职业适应性测试题库及答案1套
- 2026年硅湖职业技术学院单招职业适应性测试题库含答案
- 沧州交通学院《语言学流派》2025-2026学年第一学期期末试卷
- 大连海洋大学《给水排水管网系统》2025-2026学年第一学期期末试卷
- 12.1拥有积极的人生态度 课件-统编版道德与法治七年级上册
- 2025年合伙协议(旅游项目)
- 2025年医疗机构门急诊医院感染管理规范题库(附答案)
- 2025年护理安全、急救、应急预案、核心制度试题与答案
- 护士病房考试题及答案
- 2025年高考化学试卷(安徽卷)(空白卷)
- 2025年希望杯IHC真题-二年级(含答案)
- T/CSBME 065-2023医用敷料材料聚氨酯泡沫卷材
- 医疗废物管理工作督查记录表
- 幕墙安装工程专项施工方案
- 化工总控工职业技能鉴定考试题库大全-下(简答题)
- 广东省汕头市金平区2024-2025学年七年级上学期期末考试语文试题
- 销售区域承包合同条款3篇
- 气胸的教学查房
- 幼儿园小班音乐歌唱《碰一碰》课件
- G520-1~2(2020年合订本)钢吊车梁(6m~9m)(2020年合订本)
评论
0/150
提交评论