`
cmysunny
  • 浏览: 6151 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring+hibernate+junit的Dao测试

阅读更多
开发一个eclipse3.4+Struts2.0+hibernate3.2+Spring2.5+oracle10g的项目。实现完DAO层后,想对Dao层做下测试。以前都是用的Junit3.8,这次换了最新的Junit4.4,但是在写测试类时遇到不少麻烦,将碰到的问题和解决方法记录下来,供后来的朋友们参考。

下面分别讲解在Junit4.4和Junit3.8下如何写测试类。
对于Junit3.8:
Spring的DAO层的测试,spring-test.jar包里有个AbstractTransactionalDataSourceSpringContextTests类,只要继承它,然后重写getConfigLocations方法就可以了。比较简单,而且又支持回滚,没有数据库的耗时操作。
对于你所有的applicationContext.xml等spring配置文件,你都不用动。Eclipse默认的classpath路径是项目路径下的build/classes,注意不要被你的ant写的build覆盖了,而ant的build又没有编译test包。最终找不到测试类。

下面先写一个基本的测试类,其他的只要继承这个类并添加test方法即可。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

public class BaseDaoTestCaseJunit3 extends
AbstractTransactionalDataSourceSpringContextTests {

protected final static Log log = LogFactory.getLog(BaseDaoTestCaseJunit3.class);

@Override
protected String[] getConfigLocations(){
this.setAutowireMode(AUTOWIRE_BY_NAME);
return new String[]{"classpath:/applicationContext.xml","classpath:/spring-config-*.xml"};
}

public void testConfig() {       
       assertNotNull("spring-mock context has bean init()",this.applicationContext);
    }
}
下面这个类继承自上面的BaseDaoTestCaseJunit3,只是测试了下CustInfoDao里面的findByEmail方法。
import com.psi.domain.CustInfo;

public class CustInfoDaoTests3 extends BaseDaoTestCaseJunit3 {
private CustInfoDao ciDao;
private CustInfo ci;

public CustInfoDaoTests3(){}

public void setCustInfoDao(CustInfoDao ciDao){
this.ciDao = ciDao;
}

public void getList(){
try{
ci = ciDao.findByEmail("sue76543@ms5.url.com.tw"); //此方法直接返回对象.
assertNotNull(ci.getId());
}catch(Exception e){
e.printStackTrace();
}
}
}

下面讲讲Junit4.4的写法:
Junit4用了完全不同于Junit3的写法,它的配置文件等都只需要在annotation里标注即可。TransactionManager是你在application里配置的TransactionManager。
package com.psi.dao;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/applicationContext.xml","classpath:/spring-config-*.xml"})
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
@Transactional
public class BaseDAOTestCaseJunit44 {
//本类作为基类,所有要用到的东西都在annotation里配置了。所以什么内容都不用写了。
}
//Dao测试类继承自上面的基类,并添加了个测试方法findByEmail。

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.psi.domain.CustInfo;

public class CustInfoDaoTests extends BaseDAOTestCaseJunit44 {
private CustInfoDao ciDao;
private CustInfo ci;

public CustInfoDaoTests(){}

@Autowired
public void setCustInfoDao(CustInfoDao ciDao){
this.ciDao = ciDao;
}

@Before
public void init(){}

@Test
public void getList(){
try{
ci = ciDao.findByEmail("sue76543@ms5.url.com.tw");
assertNotNull(ci.getId());
}catch(Exception e){
e.printStackTrace();
}
}
}
就这么简单,但是要注意要加载相应的包,Spring-test.jar, apache的commons-下的包最好都加上。(项目中你基本都能用上)
还要注意你的配置文件路径。
我还碰到过下面这个错误:
Caused by: java.lang.NullPointerException
    at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:374)
这是Eclipse的Bug,它在测试环境下不能自动加载到SystemLibrary下的所有包,所以你需要将你的Library改成user-library即可。
分享到:
评论

相关推荐

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.6.16 编写Spring和Hibernate的配置文件spring-config.xml 12.6.17 编写web.xml 12.6.18 验证示例 12.7 小结 第四篇 J2EE项目案例精选 第十三章 网上调查系统 13.1 系统概述 13.2 需求分析 13.2.1 系统用例图 ...

    junit测试spring,hibernate的dao层代码

    NULL 博文链接:https://ljz0898.iteye.com/blog/1547159

    struts2.1.6+spring2.0+hibernate3.2常用配置包

    spring-dao.jar //3 spring-hibernate3.jar //3 spring-jdbc.jar //3 spring-web-2.5.6.jar //1 struts2-core-2.1.6.jar //2 struts2-convention-plugin-2.1.6.jar //2* struts2-spring-plugin-2.1.6.jar //1 xwork-...

    Spring+3.x企业应用开发实战光盘源码(全)

     第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。  第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及...

    陈开雄 Spring+3.x企业应用开发实战光盘源码.zip

     第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。  第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及...

    struts2.1宝典

    目录 ...struts2表单标签 1 1、struts资源文件中文解决...SSH Struts+Spring+Hibernate整合 38 创建WEB工程 39 添加Struts2.1开发支持 39 添加Spring开发支持 39 添加Hibernate支持 40 添加Jar包 42 修改Web.xml文件, 42

    spring4.3.9相关jar包

    spring-test.jar:对JUNIT等测试框架的简单封装 spring-tx.jar:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 spring-webmvc-portlet.jar:Spring MVC的增强 spring-websocket.jar:

    Spring.3.x企业应用开发实战(完整版).part2

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 ...B.3.4 使用Gienah Testing在JUnit 4中进行测试 B.4 小结

    Spring in Action(第二版 中文高清版).part1

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 ...B.3.4 使用Gienah Testing在JUnit 4中进行测试 B.4 小结

    SSH2 集成实例代码

    struts2.1 spring2.5 hibernate3.2 很好的集成实例代码,Hibernate配置文件采用POjo注解的形势,spring管理action和BPO、DAO等 用MySQL数据库,用TestServer做JUnit测试时,会自动创建所需要的表

    Spring3.x企业应用开发实战(完整版) part1

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...3.3注入非springbean ...3.5使用spring的特殊bean ...b.3.4使用gienahtesting在junit4中进行测试 b.4小结

    java ssh框架

    hibernate封装底层数据库操作,提供持久化数据服务 spring管理hibernate--数据源,事务 dao层提供数据库访问接口;service层(事务控制)提供业务接口 struts提供视图转发控制器、视图模板 ...jUnit测试

    Spring攻略(第二版 中文高清版).part1

    13.1 用JUnit and TestNG创建测试 504 13.1.1 问题 504 13.1.2 解决方案 504 13.1.3 工作原理 504 13.2 创建单元测试和集成测试 509 13.2.1 问题 509 13.2.2 解决方案 509 13.2.3 工作原理 510 13.3...

    客户关系管理系统框架搭建(二)

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!--表示在类路径下加载hibernate.cfg.xml --> <value>classpath:hibernate.cfg.xml ...

    Spring中文帮助文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    Spring攻略(第二版 中文高清版).part2

    13.1 用JUnit and TestNG创建测试 504 13.1.1 问题 504 13.1.2 解决方案 504 13.1.3 工作原理 504 13.2 创建单元测试和集成测试 509 13.2.1 问题 509 13.2.2 解决方案 509 13.2.3 工作原理 510 13.3...

Global site tag (gtag.js) - Google Analytics