`
rocket
  • 浏览: 92072 次
  • 性别: Icon_minigender_1
  • 来自: 金城
社区版块
存档分类
最新评论

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
junit-classpath.JPG


最后我对整体的spring+hibernate的jsf框架进行了一下单元测试的框架总结,主要多了一个基本的BaseTestCase,用于统一读取applicationContext
单元测试框架.jpg

可以看到下面的pagebean和jsp页面以及相关的taglib的单元测试我还没有完成:),我将在今后几天继续研究相关的单元测试问题
分享到:
评论
4 楼 benjaminwolf 2009-06-17  
小生有一事不明:
AbstractTransactionalDataSourceSpringContextTests类是用来做集成测试的
楼主的标题是“单元测试”
Spring的官方文档上说:单元测试不应该依赖于任何的容器,请问楼主怎么解释呢?

如果每一个测试用例都继承自AbstractTransactionalDataSourceSpringContextTests的话,在那么每个用例执行时都会初始化一次Spring容器,当测试用例非常多的时候,批量的跑这些用例(比如mvn test),就会出现OOM异常。
3 楼 rocket 2008-08-22  
两年前的文章了,呵呵,嘴下留情啊
那时候经验比较少
2 楼 Kisses99 2008-08-22  
是lz表达能力有限。
可能中文不太好。
下次用英语八。
1 楼 webday 2008-08-13  
也许是我水平太差   不知道说了些什么....

相关推荐

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境的搭建是一个非常重要的步骤。本文将详细介绍如何在 Struts2+Spring+Hibernate 框架中搭建 Action 的单元测试环境。 首先,需要了解为什么需要对 ...

    Spring+SpringMVC+Hibernate框架集成详解

    在本文档中,我们将详细介绍如何测试 Spring、SpringMVC 和 Hibernate 框架的集成。我们将介绍如何创建测试实体类,如何配置 applicationContext.xml,如何测试 Spring 框架的运行情况。同时,我们还将介绍如何测试 ...

    用Maven搭建Spring+Spring MVC+Hibernate框架

    总结起来,使用Maven在Eclipse中搭建Spring+Spring MVC+Hibernate框架涉及以下步骤: 1. 创建Maven项目,配置`pom.xml`。 2. 配置Spring和Spring MVC的XML配置文件。 3. 设置Hibernate配置,创建实体类。 4. 构建Web...

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

    struts+spring+hibernate三大框架整合

    SSH三大框架,即Struts、Spring和Hibernate,是Java Web开发中的常用技术组合,它们各自负责不同的职责:Struts作为MVC模式中的Controller层,处理用户请求并转发到相应的业务逻辑;Spring则作为核心容器,负责依赖...

    Spring+hibernate 单元测试

    Spring 2.5 的 TestContext 测试框架为开发人员提供了一种更为简洁、灵活的方式来编写和组织单元测试。通过使用注解来配置测试逻辑,可以极大地提高测试代码的可读性和可维护性。同时,结合 Hibernate 进行数据库...

    spring+struts+hibernate框架

    "Spring+Struts+Hibernate"(SSH)框架是Java Web开发中的经典组合,被誉为"三剑客"。这个框架集合提供了全面的企业级应用解决方案,帮助开发者构建高效、可扩展且易于维护的Web应用程序。 Spring框架是核心,它...

    图书管理系统spring+struts+hibernate

    《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...

    Spring+Struts2+Hibernate三大框架开发校园精品课程网源代码

    本项目以"Spring+Struts2+Hibernate"三大框架为核心,旨在实现一个校园精品课程网的后台系统,提供丰富的功能和良好的用户体验。下面将详细介绍这三个框架以及它们在该项目中的应用。 1. Spring框架:Spring是Java...

    idea工具创建的Spring+SpringMVC+Hibernate+maven项目

    标题中的"idea工具创建的Spring+SpringMVC+Hibernate+maven项目"指的是使用IntelliJ IDEA这个集成开发环境(IDE)构建的一个Java Web项目,该项目整合了四个关键的技术框架:Spring、SpringMVC、Hibernate以及Maven...

    Spring+SpringMVC+Hibernate+JSP框架搭建

    "Spring+SpringMVC+Hibernate+JSP框架搭建"就是一个经典的Java Web开发解决方案,它整合了四个核心组件来实现全面的后端功能和用户界面交互。下面我们将深入探讨这四个组件以及它们如何协同工作。 1. **Spring框架*...

    springMVC+hibernate+spring+maven框架代码实例

    在IT行业中,构建高效、可维护的Web应用是至关重要的,而`SpringMVC`、`Hibernate`、`Spring`和`Maven`这四个框架的整合应用正是实现这一目标的有效途径。本实例将深入探讨这四大框架如何协同工作,为开发者提供一套...

    Spring+SpringMVC+Hibernate+Maven框架搭建及配置文件源码

    在IT行业中,SSH框架指的是Spring、SpringMVC和Hibernate这三个组件的组合,它们是Java Web开发中的主流技术栈。Spring提供了依赖注入和面向切面编程,SpringMVC用于处理HTTP请求,而Hibernate则是用于对象关系映射...

    spring mvc + spring + hibernate 全注解整合开发视频教程 04

    在实际开发中,我们还会用到Spring的其他功能,比如Spring MVC的拦截器(Interceptor)用于全局处理,`@ExceptionHandler`注解处理异常,以及Spring的单元测试支持。同时,我们还会关注性能优化,如缓存机制(如使用...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    7.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 2)Demo 导入说明: 1.Eclipse Encoding:GBK 2.Eclipse 导入后可能需要在 Xml Catalog 手动添加:ehcache-spring-1.2.xsd(ehcache-spring-annotations...

    Struts2+Spring+Hibernate框架技术与项目实战——上

    Struts2、Spring和Hibernate是Java开发中常用的三大框架,它们各自解决了一部分软件开发中的问题,而将它们集成在一起,通常称为“SSH2”框架(Struts2、Spring、Hibernate第二代)。这个框架组合提供了完整的MVC...

    Spring+SpringMVC+Hibernate 框架整合

    Spring、SpringMVC和Hibernate是Java开发中非常流行的三大框架,它们各自负责应用程序的不同层面,协同工作能够构建出高效、可维护的Web应用。在"Spring+SpringMVC+Hibernate 框架整合"中,这三者的核心功能和整合...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    6. 使用Spring测试框架进行单元测试和集成测试。 通过学习本教程,你将能够熟练地运用这三大框架进行全注解的整合开发,从而提高开发效率,打造出高质量的Java Web应用。无论你是初学者还是有经验的开发者,这个...

    struts+spring+hibernate实现图书修改和删除

    在IT行业中,SSH(Struts + Spring + Hibernate)是一个经典的Java Web开发框架组合,用于构建高效、可扩展的Web应用程序。本项目通过SSH框架实现了图书管理系统的图书修改和删除功能,下面将详细介绍这三个核心组件...

Global site tag (gtag.js) - Google Analytics