今天我将展示一下我是如何在实际中对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的方法,所以在我看来测试的意义并不是很大
分享到:
相关推荐
KBUnitTest是一款轻量级DAO单元测试框架,开发者可以通过此框架,在Android Studio运行SQLiteDatabase、SharedPreference单元测试。KBUnitTest支持原生SQLiteDatabase操作及GreenDAO、Afinal、XUtils、DbFlow第三方...
NULL 博文链接:https://zhuliang1984723.iteye.com/blog/2260856
本篇文章将重点讲解如何在IDEA环境下,针对Spring多模块项目中的Dao层进行单元测试。 首先,我们要理解什么是单元测试。单元测试是一种软件测试方法,它针对程序中的最小可测试单元,如方法或类,进行独立验证。在...
"unit_test_db:DAO单元测试框架"是一个专为数据库相关单元测试设计的工具,主要针对Java开发人员。这个框架的核心目标是简化数据库驱动的单元测试过程,确保代码在与数据库交互时的正确性和稳定性。 在数据库开发中...
jdbc详细测试用例,包括connection ,statement,preparedstatement,resultset,BeanUtils,DBUtils,数据库连接池dbcp,cp03的单元测试,及dao层的统一封装,适合项目开发人员学习和项目中使用。
在单元测试中,特别是当测试对象涉及到数据库操作,如 DAO(Data Access Object)时,DbUnit 提供了一种优雅的解决方案,能够初始化和清理数据库,确保测试的准确性。 在本文中,我们看到一个使用 DbUnit 进行 ...
标题“使用junit测试ssh中的dao”涉及到的是Java开发中的单元测试技术,特别是针对SSH(Struts2、Spring、Hibernate)框架中的数据访问对象(DAO)进行测试。SSH是Java Web开发中常用的三大开源框架,它们协同工作以...
对于 iBATIS SqlMap 的 DAO 单元测试,DbUnit 也提供了支持。你可以为 SQL 查询、插入、更新和删除等操作创建相应的测试数据,然后在测试用例中调用这些 SQL,通过 DbUnit 检查操作前后的数据库状态变化,确保 SQL ...
传统的单元测试通常不涉及外部资源,但当测试的对象直接与数据库交互时(例如DAO层),就需要确保数据库处于一个已知且可预测的状态。DBunit允许开发者在测试前将数据库的状态设定为一个特定的状态,并在测试结束后...
编写对DAO编写单元测试[1]软件测试单元测试作为保证软件质量及重构的基础,早已获得广大开发人员的认可。单元测试是一种细粒度的测试,越来越多的开发人员在提交功能模块时也同时提交相应的单元测试。对于大多数开发...
在Spring框架中进行单元测试,特别是测试DAO层,通常需要准备默认数据和测试数据,并可能需要模拟Spring的IoC容器。尽管Spring推荐使用隔离的测试,但在实际项目中,直接使用Spring框架进行测试可以简化流程。 通过...
在IT行业中,Hibernate是一个强大的Java持久化框架,它简化了与关系型数据库的交互,而单元测试则是确保代码质量的重要工具。在这个“hibernate 单元测试批处理代码”项目中,我们将深入探讨如何使用Hibernate进行...
DBUnit 是一个强大的Java库,专门用于数据库的单元测试。它与JUnit紧密集成,使得开发者能够在执行单元测试时,能够方便地控制和验证数据库的状态。DBUnit 的核心理念是通过导入和导出数据来帮助测试数据库驱动的...
Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...
在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...
对dbunit进行mybatis DAO层Excel单元测试 在软件开发中,单元测试是一个非常重要的步骤,它可以确保软件的质量和可靠性。在mybatis DAO层中,对数据库的单元测试尤为重要,因为它直接影响到软件的性能和可靠性。...
在Spring Boot框架中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的正确性和可靠性。Spring Boot提供了方便的工具和库,使得编写和执行单元测试变得简单高效。本章节我们将深入探讨Spring Boot中的...
这个压缩包中的内容主要涉及SSH框架下进行单元测试的代码示例。通过`JdbcHibernateSupport.java`和`UnitTestTools.java`这两个文件,我们可以深入理解如何在SSH环境中编写和使用单元测试。 首先,`...