`
dong_ta
  • 浏览: 13241 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

基于DBUnit的manage(Dao)单元测试

阅读更多
TestDBConnection父类 所有test类继承该类
package test.sample.service.util;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;

import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;
/**
 * DbUnit 可以有不同的数据库操作,我使用了其中的两种:	  
	*DELETE_ALL ,它删除表中所有行。	   
	*CLEAN_INSERT ,它删除表中所有行并插入数据集提供的行。
	*This method inserts the contents of a FlatXmlDataSet file
*into the connection
 * @author donganlei
 *
 */
public class TestDBConnection extends DatabaseTestCase {
	private IDatabaseConnection conn;

	private String driverName = "oracle.jdbc.OracleDriver";

	private String dburl = "jdbc:oracle:thin:@192.168.0.2:1521:PORTAL";

	private String username = "portal";

	private String pwd = "portal";

	private String schema = "PORTAL";

	private String xmlUrl = "e:\\test.xml";//从数据库中取值到XML中(路径)

	private String dbxmlurl = "e:\\test.xml";//从XML中还原数据库中的记录(路径)
/**
 * 初始化TestDBConnection
 *
 */
	public TestDBConnection() {
		try {
			Class.forName(driverName);

			Connection jdbcConnection = DriverManager.getConnection(dburl,
					username, pwd);
			conn = new DatabaseConnection(jdbcConnection, schema);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
/**
 * 建立连接
 * 返回IDatabaseConnection
 */
	public synchronized IDatabaseConnection getConnection() throws Exception {
		Class.forName(driverName);
		Connection jdbcConnection = DriverManager.getConnection(dburl,
				username, pwd);
		conn = new DatabaseConnection(jdbcConnection, schema);
		return conn;
	}
	/**
	 * 方法:它删除表中所有行并插入数据集提供的行
	 * @throws Exception
	 */
     protected void insertFileIntoDb() throws Exception
      {
    	   DatabaseOperation.CLEAN_INSERT.execute(getConnection(), getDataSet());
      } 
    /**
     * 方法:删除数据库中的所有数据
     * @throws Exception
     */   
    protected void deleteFileDb()throws Exception{
    	DatabaseOperation.DELETE_ALL.execute(conn, getDataSet());
    }
    /**
     * 方法 :从XML中读取数据
     */
	protected IDataSet getDataSet() throws Exception {
		return new FlatXmlDataSet(new FileInputStream(dbxmlurl));
	}
/**
 * 方法:读取数据库中的内容到xmlUrl中
 * @param tableNames
 * @throws Exception
 */
	public void backUp(String[] tableNames) throws Exception {
		IDataSet fullDataSet = conn.createDataSet(tableNames);
		FlatXmlDataSet.write(fullDataSet, new FileOutputStream(xmlUrl));
	}
	/**
	 * 方法:还原数据库中的数据
	 *
	 */
	public void overRead() {

	}
	/**
	 * 方法关闭连接
	 * @throws Exception
	 */
	public void closeConn()throws Exception{
		conn.close();
	}
}


Test类
package test.sample.service.manage;
import java.util.List;

import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.ITable;

import pub.tools.PageList;
import test.sample.service.util.TestDBConnection;

import com.huawei.service.manage.WordManage;
import com.huawei.service.object.LeaveWordObject;
/**
 *  insertFileIntoDb(): Inserts a file in the database 
	emptyTable(): Cleans a database table 
	insertAllFilesIntoDb(): Inserts all the files for your project 
	emptyAllTables(): Cleans all the tables for your project 

 * @author donganlei
 *
 */
public class WordManageTest  extends TestDBConnection {
	private IDataSet expectedDataSet;//XML中数据源设置
	private ITable expectedTable;//XML中的数据
	private IDataSet databaseDataSet;//数据库中的数据源设置
	private ITable actualTable;//数据库中的数据
	LeaveWordObject word;
	String[] args={"ser_leaveword"};//所有要操作的表
	private IDatabaseConnection conn;
	public WordManageTest()throws Exception{
		conn=this.getConnection();
		this.backUp(args);//得到数据
		expectedDataSet = getDataSet();
        expectedTable = expectedDataSet.getTable("ser_leaveword");
        databaseDataSet = getConnection().createDataSet();
        actualTable = databaseDataSet.getTable("ser_leaveword");
	}
	/**
	 * 测 getList 方法
	 * @throws Exception
	 */
	public void testGetWordList()throws Exception {
		PageList pagination=new PageList();
		WordManage wm=new WordManage();
		List list=wm.getWordList(1, pagination);
		String result=((LeaveWordObject)list.get(0)).getWordtitle();
        assertEquals("testGetWordList",expectedTable.getValue(15, "WORDTITLE"),actualTable.getValue(15, "WORDTITLE"));
        assertEquals("testGetWordList",expectedTable.getValue(15, "WORDTITLE"),result);
    }
	/**
	 * 测试Insert方法
	 * @throws Exception
	 */
	public void testInsertWord()throws Exception{
		WordManage wm=new WordManage();
		word=new LeaveWordObject();
		word.setClientid("1");
		word.setLeaveword("测试方法");
		word.setLeavetime("2008-01-01 11:11:11");
		word.setFlag("0");
		word.setAnswerman("3");
		word.setWordtitle("标题测试");
		wm.insertWord(word);
		conn=this.getConnection();
		this.backUp(args);
		assertEquals("testGetWordList",expectedTable.getValue(16, "WORDTITLE"),actualTable.getValue(16, "WORDTITLE"));
		assertEquals("testGetWordList",expectedTable.getValue(16, "WORDTITLE"),"标题测试");
	}
	/**
	 * 测试根据ID查找留言对象
	 * @throws Exception
	 */
	public void testGetWordById()throws Exception{
		WordManage wm=new WordManage();
		conn=this.getConnection();
		this.backUp(args);
		assertEquals("testGetWordList",expectedTable.getValue(16, "WORDTITLE"),actualTable.getValue(16, "WORDTITLE"));
		assertEquals("testGetWordList",expectedTable.getValue(16, "WORDTITLE"), wm.getWordById(180).getWordtitle());
	}
	/**
	 * 根据用户ID和时间查询 测试用户留言列表
	 * @throws Exception
	 */
	public void testGetUserListByTime()throws Exception{
		WordManage wm=new WordManage();
		PageList pagination=new PageList();
		conn=this.getConnection();
		this.backUp(args);
		List list=wm.getUserListByTime(1, "2008-01-01 11:11:11", "2008-04-04 11:11:11", pagination);
		String result=((LeaveWordObject)list.get(0)).getWordtitle();
		
		assertEquals("testGetWordList",expectedTable.getValue(2, "WORDTITLE"),actualTable.getValue(2, "WORDTITLE"));
        assertEquals("testGetWordList",expectedTable.getValue(2, "WORDTITLE"),result);
	}
	/**
	 * 根据坐席ID和时间查询 测试用户留言列表
	 * @throws Exception
	 */
	public void testGetSeatListByTime()throws Exception{
		WordManage wm=new WordManage();
		PageList pagination=new PageList();
		conn=this.getConnection();
		this.backUp(args);
		List list=wm.getSeatListByTime(3, "2008-01-01 11:11:11", "2008-04-04 11:11:11", pagination);
		String result=((LeaveWordObject)list.get(0)).getWordtitle();
		assertEquals("testGetWordList",expectedTable.getValue(8, "WORDTITLE"),actualTable.getValue(8, "WORDTITLE"));
        assertEquals("testGetWordList",expectedTable.getValue(8, "WORDTITLE"),result);
	}
	/**
	 * 测试用户回复留言
	 * @throws Exception
	 */
	public void testUpdateWord()throws Exception{
		WordManage wm=new WordManage();
		word=new LeaveWordObject();
		word.setId("1");
		word.setClientid("1");
		word.setLeaveword("测试方法");
		word.setLeavetime("2008-01-01 11:11:11");
		word.setFlag("0");
		word.setAnswerman("3");
		word.setWordtitle("标题测试");
		word.setAnswercontent("测试回复");
		wm.updateWord(word);
		conn=this.getConnection();
		this.backUp(args);
		assertEquals("testGetWordList",expectedTable.getValue(0, "ANSWERCONTENT"),actualTable.getValue(0, "ANSWERCONTENT"));
		assertEquals("testGetWordList",expectedTable.getValue(0, "ANSWERCONTENT"),"测试回复");
	}
	
	public static void main(String[] args){
		junit.textui.TestRunner.run(WordManageTest.class);
	}
}

分享到:
评论

相关推荐

    主题:在Spring中结合Dbunit对Dao进行集成单元测试

    在Spring框架中,进行Dao层的集成单元测试时,常常会结合Dbunit工具来实现数据库相关的测试。Dbunit是一款强大的Java库,它扩展了JUnit,为数据库提供了结构化数据的导入和导出,使得测试更加方便和可靠。下面将详细...

    DBUnit 进行单元测试

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

    基于DbUnit的单元测试框架设计

    DbUnit是一款开源的数据库功能测试框架,使用它可以对数据库的基本操作进行白盒...文章针对此种情况,介绍了如何基于DbUnit设计一个数据库单元测试框架,使用Excel文件提供测试数据,从而提高数据库单元测试的工作效率。

    用DbUnit进行SqlMap单元测试

    在单元测试中,特别是当测试对象涉及到数据库操作,如 DAO(Data Access Object)时,DbUnit 提供了一种优雅的解决方案,能够初始化和清理数据库,确保测试的准确性。 在本文中,我们看到一个使用 DbUnit 进行 ...

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

    Dbunit是一个基于Java的数据库单元测试工具,它可以帮助开发者快速地编写数据库单元测试代码。Dbunit支持多种数据库管理系统,如MySQL、Oracle、DB2等。 四、Dbunit配置文件 在使用dbunit之前,需要在pom.xml文件...

    dbunit-2.2.3-prj.rar_DbUnit 2.2_dbunit_单元测试

    DbUnit 是一个专门为Java开发人员设计的开源工具,主要用于数据库系统的单元测试。它与JUnit紧密集成,使得在执行单元测试时能够对数据库的状态进行精确控制,确保测试的可重复性和可靠性。DbUnit 2.2.3 版本是这个...

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

    DbUnit是一个基于JUnit的数据库测试框架,它可以帮助我们测试数据库相关的代码。使用DbUnit,我们可以模拟数据库数据,并测试数据库相关的代码。例如,我们可以使用DbUnit来测试DAO层的代码,确保其能够正确地读取和...

    unitils整合dbunit利用excel进行单元测试

    unitils整合dbunit利用excel进行单元测试 包含mock以及整合spring进行测试

    Junit+dbunit单元测试jar包

    `Junit` 和 `dbunit` 是两个非常重要的工具,它们分别针对Java应用程序的单元测试和数据库测试提供支持。让我们详细了解一下这两个库以及如何将它们结合使用。 `Junit` 是一个流行的开源Java单元测试框架,由Ernst ...

    单元测试JUnit4和DbUnit

    DbUnit则是一个专门用于数据库单元测试的工具,它允许开发者在测试前后对数据库的状态进行操作,如填充测试数据、清理数据等,以保证每次测试都在一致的环境中进行。 首先,了解JUnit4的基础知识至关重要。JUnit4...

    dbunit单元测试

    DBUnit 是一个强大的开源工具,专门用于数据库的单元测试,它是JUnit框架的一个扩展,使得开发者在进行测试时能够更有效地管理和控制数据库的状态。这个工具的主要目的是确保测试的隔离性和可重复性,使得每次测试都...

    通过DBUNIT做批量对比测试

    DBUNIT 是一个开源的 Java 库,专门用于数据库测试,它提供了一种结构化的方法来设置和验证数据库的状态。在软件开发中,测试是保证代码质量和功能正确性的重要环节,而 DBUNIT 尤其适用于对数据库操作进行测试,...

    使用dbunit测试数据库

    对于 iBATIS SqlMap 的 DAO 单元测试,DbUnit 也提供了支持。你可以为 SQL 查询、插入、更新和删除等操作创建相应的测试数据,然后在测试用例中调用这些 SQL,通过 DbUnit 检查操作前后的数据库状态变化,确保 SQL ...

    DBUnit与H2内存数据库结合(单元测试)

    DBUnit与H2内存数据库结合是进行单元测试的一种高效方法,尤其在开发Java应用程序时,它可以帮助开发者确保数据层的功能正确性。这篇文章将详细介绍如何利用DBUnit和H2内存数据库来构建单元测试环境。 首先,DBUnit...

    junit单元测试jar包集

    这里提到的四个文件是Java开发中常用的单元测试框架和库,分别是JUnit、DBUnit、Unitils和Mockito。让我们逐一深入探讨它们的功能和使用方法。 **JUnit** 是Java领域中最广泛使用的单元测试框架,这里的`junit-4.11...

    单元测试培训文档.pptx

    ### 单元测试的重要性及实施方法 #### 一、为何过去我们忽略了单元测试? 1. **缺乏编写单元测试的知识**:很多开发者对于如何编写有效的单元测试并不熟悉,这导致他们在项目开发过程中没有考虑加入单元测试。 2. ...

    spring与dbunit集成测试

    6. **编写测试**:在测试方法中,使用Spring的`@Autowired`注解注入需要测试的服务或DAO,然后调用其方法进行验证。结合DBUnit,可以确保测试前后数据库状态的一致性。 7. **异常处理和断言**:根据业务需求,使用...

Global site tag (gtag.js) - Google Analytics