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

DAO层单元测试

阅读更多
今天我将展示一下我是如何在实际中对dao进行单元测试的
首先我们来确认一下dao需要什么样的环境,我的dao是用Spring+hibernate来构建的,而对应的数据源是oracle9。所以要进行dao的测试我需要从Spring的连接oracle的context中获取dao的实例出来,这里我使用的是spring-mock
spring-mock使用比较简单的,只需要设置spring的配置文件路径就可以获得上下文了
这里需要注意的是这个spring上下文是ClassPathApplicationContext,而我们在web环境中经常遇到的是WebApplicationContext
/** *//**
 * $Id:$
 *
 * Copyright 2005 easou, Inc. All Rights Reserved.
 
*/

package test.spring.common;

import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

import test.PathConfig;

public class BaseSpringTestCase extends
        AbstractTransactionalDataSourceSpringContextTests 
{    

    @Override
    
protected String[] getConfigLocations() {

        String[] config 
= PathConfig.springxml;

        
return config;

    }
        
    
public void testConfig() {        
        assertNotNull(
"spring-mock context has bean init()",this.applicationContext);
    }


}
这里testConfig是用来检查你spring配置的加载是否正确的

下面给出一个DAO的简单查询方法
public List getHomepageAreasByChannelId(long channelId) {

        
return this.executeHQL(" from CsHomepageArea  h where h.csChannel.id='"
                
+ channelId + "' order by h.theOrder");
    }


上面的方法指示根据一个id取列表出来,而我们要测试的目标有(其实也就是我们这个方法要实现的目标):
1、给出正确的id是否能否返回正确的结果
2、返回的结果集能够根据hibernate配置文件而得到我们期望的结果集(比如说对子集的lazy读取)
3、返回的结果集是否按照你所期望的排序
4、给出错误的id是否在获取数据时会出错
根据上面的测试目标我们就很容易的得到下面的测试方法了

public void testGetHomepageAreasByChannelId() {
        List list 
= channelDAO.getHomepageAreasByChannelId(1);
        assertNotNull(
"homepage list is not null", list);
        CsHomepageArea homepage 
= (CsHomepageArea) list.get(0);
        assertNotNull(
"homepage'name is not null", homepage.getName());
        assertNotNull(
"homepage'channel has been lazy", homepage.getCsChannel()
                .getName());
        assertNotNull(
"homepage'column has been lazy", homepage.getCsColumn()
                .getName());
        assertNotNull(
"homepage'subject has been lazy", homepage
                .getCsSubjects().iterator().next().getName());
        CsSubject subject 
= (CsSubject) homepage.getCsSubjects().iterator()
                .next();
        assertNotNull(
"homepage'subject'keyword has been lazy", subject
                .getCsSubjectKeywords().iterator().next().getName());

    }

对于DAO层的查询方法,我们测试的就是判断返回的数据是否是我们需要的

下面这个方法是DAO的增改方法,和删除方法

public void saveComment(CsComment comment) {
        getHibernateTemplate().saveOrUpdate(comment);        
    }

    
public void deleteComment(CsComment comment) {        
        getHibernateTemplate().delete(comment);        
    }

 

对于这种无返回值得方法我们主要测试的是:
1、对于正确的数据是否能够正确的存入数据库或者从数据库删除
2、对于错误的数据操作能够有错误信息(如主键重复)

public void testSaveComment(){
        CsComment comment 
= new CsComment();
        comment.setCommentDate(
new Date());
        comment.setContent(
"comment test");
        channelDAO.saveComment(comment);
        CsComment dbComment 
=(CsComment)channelDAO.getEntity(comment.getId());
        assertNotNull(
"comment has bean saved", dbComment);
    }

    
public void testDeleteComment(){
        CsComment comment 
= new CsComment();
        comment.setId(
new Long(13));
        channelDAO.delete(comment);
        CsComment dbComment 
=(CsComment)channelDAO.getEntity(comment.getId());
        assertNull(
"comment has bean delete", dbComment);
    }

其实这种save或者delete的方法由于使用时都是基本调用hibernate的方法,所以在我看来测试的意义并不是很大


rocket 2007-01-17 00:59 发表评论
分享到:
评论

相关推荐

    SpringBoot 多模块Dao层单元测试

    本篇文章将重点讲解如何在IDEA环境下,针对Spring多模块项目中的Dao层进行单元测试。 首先,我们要理解什么是单元测试。单元测试是一种软件测试方法,它针对程序中的最小可测试单元,如方法或类,进行独立验证。在...

    使用junit测试ssh中的dao

    1. **模拟环境**:由于DAO层依赖于数据库,因此在单元测试中,我们需要使用如Hibernate Test或Mockito等工具来模拟数据库环境,避免实际连接数据库。 2. **创建测试类**:创建一个继承自Spring的...

    JDBC相关单元测试及通用的Dao

    jdbc详细测试用例,包括connection ,statement,preparedstatement,resultset,BeanUtils,DBUtils,数据库连接池dbcp,cp03的单元测试,及dao层的统一封装,适合项目开发人员学习和项目中使用。

    自动测试所有dao单元测试

    NULL 博文链接:https://zhuliang1984723.iteye.com/blog/2260856

    DAO单元测试

    今天我将展示一下我是如何在实际中对dao进行单元测试的首先我们来确认一下dao需要什么样的环境,我的dao是用Spring+hibernate来构建的,而对应的数据源是oracle9。所以要进行dao的测试我需要从Spring的连接oracle的...

    Android-YuiHatano——轻量级AndroidDAO单元测试框架

    总结一下,Android-YuiHatano是一个专注于DAO层单元测试的轻量级框架,它简化了对SQLite数据库和SharedPreference的测试工作,提升了Android应用的质量和可靠性。通过使用YuiHatano,开发者可以更加自信地进行数据层...

    利用JUnit和Spring-test对SpringJDBC组件DAO层测试

    而单元测试是确保代码质量、预防缺陷的重要手段。本话题将深入讲解如何利用JUnit和Spring-test这两个工具对SpringJDBC组件的DAO层进行有效测试。 首先,JUnit是一个流行的Java单元测试框架,它允许开发者编写可重复...

    简单DAO层示例

    在单元测试中,我们通常会使用Mock框架(如Mockito)来模拟数据库操作,避免实际访问数据库,提高测试效率。 在实际项目中,DAO层往往与Service层配合工作。Service层负责业务逻辑,DAO层负责数据访问。Service层...

    对DAO编写单元测试[1]

    编写对DAO编写单元测试[1]软件测试单元测试作为保证软件质量及重构的基础,早已获得广大开发人员的认可。单元测试是一种细粒度的测试,越来越多的开发人员在提交功能模块时也同时提交相应的单元测试。对于大多数开发...

    对dbunit进行mybatis DAO层Excel单元测试(必看篇)

    对dbunit进行mybatis DAO层Excel单元测试 在软件开发中,单元测试是一个非常重要的步骤,它可以确保软件的质量和可靠性。在mybatis DAO层中,对数据库的单元测试尤为重要,因为它直接影响到软件的性能和可靠性。...

    DBUnit 进行单元测试

    DBUnit 是一个强大的Java库,专门用于数据库的单元测试。它与JUnit紧密集成,使得开发者能够在执行单元测试时,能够方便地控制和验证数据库的状态。DBUnit 的核心理念是通过导入和导出数据来帮助测试数据库驱动的...

    junit测试spring,hibernate的dao层代码

    在软件开发过程中,单元测试是确保代码质量的重要环节。`JUnit` 是Java编程语言中最流行的单元测试框架,它允许开发者编写可重复运行的测试用例,以验证代码的正确性。`Spring` 和 `Hibernate` 分别是Java企业级应用...

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合

    这包括单元测试、集成测试等。 #### 四、总结 Spring框架的强大之处在于它不仅能够有效地组织和管理复杂的软件系统,还能够与其他流行的技术框架无缝集成,形成一个高度灵活、可扩展的平台。通过上述步骤,我们...

    Spring对于业务层的单元测试支持

    其中,Spring对于业务层的单元测试和集成测试提供了丰富的工具和功能,使得开发者能够更加高效地对代码进行验证和调试。本文将深入探讨Spring如何帮助我们进行业务层的测试。 首先,单元测试主要关注的是单个类或...

    web应用dao层的开发经验小结

    使用JUnit进行单元测试,确保每个DAO方法的功能正确性,Mockito等工具可用于模拟数据库交互,提高测试覆盖率。 10. 持续集成与自动化 结合Maven或Gradle构建工具,配置自动化测试、代码检查和部署流程,确保DAO层...

    数据库持久层的UT测试

    总的来说,"数据库持久层的UT测试"涵盖了如何有效地对MyBatis DAO层进行单元测试,涉及到的工具和概念包括:MyBatis、DAO设计模式、JDK 1.6、Maven、JUnit、Mockito、数据库配置切换、测试数据初始化和回滚。...

    Hibernate封装dao层

    对DAO层进行充分的单元测试,验证其功能的正确性,可以使用JUnit和Mockito等工具。 9. **最佳实践**: - 避免在DAO层进行复杂的业务逻辑,保持DAO层的简洁性。 - 使用连接池管理数据库连接,如C3P0、HikariCP等...

    通向架构师的道路(第二十五天)SSH的单元测试与dbunit的整合.docx

    SSH单元测试与DbUnit整合 在软件开发过程中,单元测试是一个非常...我们还讨论了单元测试的重要性和使用模拟数据测试DAO层的代码。通过使用JUnit和DbUnit,我们可以确保代码的正确性和可靠性,并提高软件开发的质量。

    jsp、servlet进行增删改查,dao层和service层分开

    - 可测试性:因为各层职责分明,可以更容易地编写单元测试,确保代码质量。 - 可维护性:如果需要更改数据库访问方式或业务逻辑,只需修改相应层,不会影响其他部分。 在实际开发中,为了进一步提高代码的复用性...

    省略dao层,采用全注解完成登录功能

    8. **测试**:为了确保登录功能的正确性,项目可能还包括了JUnit测试类,对Service或Controller的方法进行单元测试,确保在各种情况下都能得到预期的结果。 通过这样的设计,项目能够以更高效、更模块化的方式实现...

Global site tag (gtag.js) - Google Analytics