`
cmysunny
  • 浏览: 6480 次
  • 性别: 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即可。
分享到:
评论

相关推荐

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

    Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...

    springmvc+spring+hibernate

    10. **测试与部署**:编写JUnit测试用例,对Controller、Service、DAO层进行单元测试。测试无误后,将项目打包成WAR文件,部署到Tomcat服务器上运行。 通过上述步骤,我们完成了Spring MVC、Spring、Hibernate的...

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

    在IT行业中,构建大型、模块化的Java应用时,通常会采用一些成熟的框架组合,例如Spring、Spring MVC和Hibernate。这些框架协同工作,可以提供强大的后端功能,包括依赖注入、模型-视图-控制器(MVC)架构以及对象...

    搞定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 系统用例图 ...

    springmvc5+hibernate5+junit4+log4j2整合实例

    在本整合实例中,我们将探讨如何将Spring MVC 5、Hibernate 5、JUnit 4 和 Log4j2 集成在一起,以构建一个高效、可测试和日志记录完善的Java Web应用程序。以下是对这些技术及其整合过程的详细说明: **Spring MVC ...

    Spring+hibernate整合源代码

    可以使用 Spring 提供的 TestContext 框架,结合 JUnit 或 TestNG,对 Service 和 DAO 层进行测试。 10. **最佳实践**:在实际项目中,为了提高性能和可维护性,通常会采用 MyBatis 或 JPA 作为更轻量级的数据访问...

    struts+spring+hibernate开发 注册小实例

    8. **测试与运行**:编写JUnit测试用例,确保每个组件正常工作,然后部署到服务器,进行实际注册功能的测试。 通过这个小实例,你可以深入理解SSH框架的协同工作方式,为后续更复杂的Java Web开发打下坚实基础。...

    spring+hibernate整合实现简单数据库添加记录

    可以使用Spring的TestContext框架和JUnit进行测试。 总之,Spring+Hibernate的整合为Java开发者提供了一种高效且灵活的方式来处理数据库操作。通过理解这两个框架的核心原理以及整合过程,初学者能够更好地掌握企业...

    spring +hibernate +maven 的案例

    6. **测试**:Maven支持各种测试框架,如JUnit,可以用来编写单元测试和集成测试,确保代码质量。 这个案例展示了如何在一个实际项目中有效地利用Spring、Hibernate和Maven,简化开发流程,提高代码质量和可维护性...

    Struts+Spring+Hibernate快速入门

    - 开发过程中,可以通过JUnit测试DAO和Service的CRUD操作,确保功能正确。 - 创建JSP页面,实现用户界面,用于显示和接收用户输入。 - 最后,通过浏览器运行和测试整个应用,确保所有操作流程顺利。 8. **开发...

    Spring+Hibernate

    10. **单元测试和集成测试**:Spring 提供了 TestNG 和 JUnit 的支持,可以方便地进行单元测试和集成测试,确保 Spring+Hibernate 集成的正确性。 SHDemo 这个文件名可能代表的是一个 Spring+Hibernate 的演示项目...

    轻量级Java+EE企业应用实战——Struts+2+Spring+Hibernate整合开发电子书3.pdf

    在本书中,作者可能详细讲解了如何将Struts 2、Spring和Hibernate整合在一起,实现数据访问层(DAO)、业务服务层(Service)和表现层(View)的无缝协作。可能包括以下内容: 1. 搭建集成环境:介绍如何配置Struts...

    搞定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 系统用例图 ...

    Struts1+Spring2+Hibernate2整合详细例子

    9. **测试**:编写JUnit测试用例,对各个层的功能进行单元测试,确保整合后的系统能够正常运行。 通过这个例子,开发者可以深入理解这三个框架的协同工作方式,以及如何在实际项目中进行整合。这种整合模式在早期的...

    Spring+SpringMvc+Maven+Hibernate整合

    7. 测试与运行:编写JUnit测试用例验证功能,然后在Tomcat或其他应用服务器上部署并运行项目。 通过这种整合,我们可以快速构建一个功能完善的Web应用,同时享受到Spring的灵活性、SpringMVC的轻量级Web控制、Maven...

    Spring+SpringMVC +Hibernate 整合

    7. 整合测试:使用JUnit进行单元测试,可以测试单独的Service或DAO方法,也可以使用MockMVC进行模拟HTTP请求的集成测试。 8. 性能优化:可以通过缓存机制(如Hibernate的第二级缓存)、分页查询、懒加载等方式提高...

    spring+springMVC+hibernate

    SSH框架提供了测试支持,如Spring的JUnit测试框架,可以帮助开发者验证各个组件的功能是否正确。 总结,"spring+springMVC+hibernate"的整合应用是Java Web开发中的常见实践,它涉及到后端的Spring管理、MVC分层、...

    简单的S2SH登陆代码,其中包含数据库(struts2+spring+hibernate)

    例如,可以编写JUnit测试用例来测试Spring管理的UserDao是否能正确查询用户,以及Struts2 Action是否能正确处理登录请求。 这个简单的S2SH登录示例是一个很好的起点,可以帮助初学者理解这三个框架的协作方式。通过...

    综合spring mvc + spring + hibernate + bootstrap开发图书管理系统

    5. **单元测试与集成测试**:利用JUnit和Mockito等工具进行测试,确保代码质量。 6. **缓存机制**:如使用Redis进行数据缓存,减少数据库压力。 7. **任务调度**:使用Quartz或Spring Task进行定时任务,如自动提醒...

    整合Struts+Spring+Hibernate简单例子开发

    同时,使用JUnit或集成测试验证Action和DAO的功能是否正常。 这个简单的例子将帮助初学者理解Struts、Spring和Hibernate如何协同工作,同时也为更复杂的项目打下基础。通过实际操作,开发者可以更深入地了解每个...

Global site tag (gtag.js) - Google Analytics