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

单元测试resultset的结果

 
阅读更多

 

 

写junit单测的时候需要模拟jdbc的resultset。我使用了如下的测试mock类:

 

		
		<mockrunner.version>0.4.1</mockrunner.version>
		<dependency>
			<groupId>com.mockrunner</groupId>
			<artifactId>mockrunner</artifactId>
			<scope>test</scope>
		</dependency>

 

MockResultSet rs = new MockResultSet("myMock");

rs.addColumn("columnA", new Integer[]{1});
rs.addColumn("columnB", new String[]{"Column B Value"});
rs.addColumn("columnC", new Double[]{2});

// make sure to move the cursor to the first row
try
{
  rs.next();
}
catch (SQLException sqle)
{
  fail("unable to move resultSet");
}

// process the result set
MyObject obj = processor.processResultSet(rs);

// run your tests using the ResultSet like you normally would
assertEquals(1, obj.getColumnAValue());
assertEquals("Column B Value", obj.getColumnBValue());
assertEquals(2.0d, obj.getColumnCValue());

 

 

自己写的:

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

/**
 * <pre>
 * TaskInitInfoRowMapper.java
 * @author xuepeng01<br>
 * @version 1.0
 * Create Time 2015年6月4日 下午8:44:27<br>
 * Description : TaskInitInfo的RowMapper类
 * </pre>
 */
public class TaskInitInfoRowMapper implements RowMapper<TaskInitInfo> {

    /*
     * (non-Javadoc)
     * @see org.springframework.jdbc.core.RowMapper#mapRow(java.sql.ResultSet,
     * int)
     */
    @Override
    public TaskInitInfo mapRow(ResultSet rs, int arg1) throws SQLException {
        TaskInitInfo obj = new TaskInitInfo();
        obj.setId(rs.getLong("id"));
        obj.setTaskId(rs.getLong("task_id"));
        obj.setDay(rs.getString("day"));
        obj.setGmtCreate(new Date(rs.getTimestamp("gmt_create").getTime()));
        obj.setGmtModify(new Date(rs.getTimestamp("gmt_modify").getTime()));
        obj.setMessage(rs.getString("message"));
        obj.setState(rs.getInt("state"));
        obj.setTryTimes(rs.getInt("try_times"));
        return obj;
    }

}

 

 

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

import com.baidu.rigel.dmap.commons.bean.impl.TaskInitInfo;

import org.joda.time.DateTime;
import org.junit.Test;

import com.mockrunner.mock.jdbc.MockResultSet;

import java.sql.SQLException;
import java.sql.Timestamp;

/**
 * <pre>
 * TaskInitInfoRowMapperTest.java
 * @author xuepeng01<br>
 * @version 1.0
 * Create Time 2015年6月23日 下午9:04:19<br>
 * Description : TaskInitInfoRowMapper测试类
 * </pre>
 */
public class TaskInitInfoRowMapperTest {

    /**
     * Test method for
     * {@link com.baidu.rigel.dmap.business.dao.mapper.TaskInitInfoRowMapper#mapRow(java.sql.ResultSet, int)}
     * .
     */
    @Test
    public void testMapRow() {
        try {
            MockResultSet rs = new MockResultSet("myMock");
            long id = 11L;
            long taskId = 11L;
            String day = "20150623";
            String message = "hello";
            int state = 2;
            int tryTimes = 2;
            rs.addColumn("id", new Long[] { id });
            rs.addColumn("task_id", new Long[] { taskId });
            rs.addColumn("day", new String[] { day });
            long time = DateTime.now().getMillis();
            rs.addColumn("gmt_create",
                    new Timestamp[] { new Timestamp(time) });
            rs.addColumn("gmt_modify", new Timestamp[] { new Timestamp(time) });
            rs.addColumn("message", new String[] { message });
            rs.addColumn("state", new Integer[] { state });
            rs.addColumn("try_times", new Integer[] { tryTimes });
            rs.next();
            
            TaskInitInfoRowMapper obj = new TaskInitInfoRowMapper();
            TaskInitInfo o = obj.mapRow(rs, 1);
            
            assertEquals(id, o.getId().longValue());
            
        } catch (SQLException e) {
            e.printStackTrace();
            fail();
        }
    }

}

 

 

 

参考: http://stackoverflow.com/questions/878848/easy-way-to-fill-up-resultset-with-data

 

 

 

 

分享到:
评论

相关推荐

    JDBC实现CRUD并用Junit进行单元测试

    本篇文章将深入探讨如何使用JDBC来实现创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)数据,以及结合JUnit进行单元测试确保代码的正确性。 首先,我们要理解JDBC的基本工作流程: 1. 加载驱动:使用...

    JDBC,异常,单元测试重点

    ### JDBC、异常与单元测试重点解析 #### 一、JDBC概述 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供...

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

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

    JSP单元测试题JNDI JAVA Naming and Directory interface

    【JSP单元测试题JNDI -JAVA Naming and Directory interface】 JNDI(JAVA Naming and Directory interface)是Java平台提供的一套接口和API,用于访问各种命名和目录服务,如DNS、LDAP等。通过JNDI,开发者可以...

    mockito源码 供java同学学习,用于在自动化单元测试中创建测试对象,为TDD或BDD提供支持

    通过使用Mockito,我们可以虚拟出一个外部依赖,这样可以降低测试组件之间的耦合度,使得我们能更专注于代码的流程和结果,从而更好地实现测试目的。 在具体的使用场景中,例如,对于一些不容易构造或者获取的对象...

    P6Spy的去掉ResultSet以及加入每日归档

    4. `unittest1.properties`, `unittest2.properties`, `unittest3.properties`:可能分别对应不同的单元测试环境,每个环境有不同的P6Spy配置。 5. `p6spy_diff.txt`、`p6spy_diff2.txt`:这些文件可能包含了P6Spy...

    java jdbc 测试项目

    总的来说,这个"java jdbc 测试项目"提供了一个学习和实践JDBC操作数据库的好平台,包括了基本的JDBC工具类实现、数据库连接配置以及使用JUnit进行单元测试。通过这个项目,开发者可以深入理解JDBC的工作原理,提高...

    jdbc学习文档

    - **单元测试**:使用JUnit进行单元测试。 - **集成测试**:确保各个组件之间的协作正确无误。 #### 七、JDBC对事务的支持 **7.1 模拟转账** - 示例代码展示了如何使用JDBC进行转账操作,并确保操作的原子性。 *...

    junit4测试数据库源码

    2. 查询:使用Statement的executeQuery方法获取ResultSet,遍历结果集检查预期数据。 3. 更新:执行`UPDATE table SET column = value WHERE condition`语句,然后通过查询验证更新是否成功。 4. 删除:执行`...

    JDBC驱动和测试代码

    测试代码通常包括单元测试和集成测试,确保数据库操作的正确性。可能使用JUnit或类似的测试框架,模拟不同的输入和预期输出,验证查询的正确性,异常处理机制以及事务管理等。 在“db”这个文件夹中,可能会包含...

    JDBC mysql Junit测试

    JUnit是Java编程语言的一个单元测试框架,它使得测试代码的编写变得简单而规范。在本场景中,我们将讨论如何使用JDBC连接MySQL数据库,并通过JUnit进行测试。 1. **JDBC基础**: - JDBC驱动:为了连接MySQL,我们...

    数据库测试代码

    在实际的测试场景中,我们可能会使用JUnit等单元测试框架来编写测试代码,确保其可重复性和可维护性。此外,可以使用Mockito等库模拟数据库交互,以便在没有真实数据库的情况下进行测试。 压缩包中的"DBTest"可能是...

    hibernate和jdbc测试

    在进行测试时,使用单元测试框架,如JUnit,可以帮助自动化测试过程。可以为每个数据库操作编写单独的测试方法,确保每个操作的正确性。此外,Mockito等库可用于模拟数据库交互,以隔离测试,避免在测试中实际访问...

    JAVA连接ORACLE数据库方法及测试

    //显示查询出来的结果------------------ ResultSetMetaData rmeta = rs.getMetaData(); //获得数据字段个数 int numColumns = rmeta.getColumnCount(); while(rs.next()) { for(int i = 0;i;...

    jdbc 连接数据库测试项目

    在本测试项目中,我们可能使用了`junit`框架来编写单元测试,确保每个JDBC操作都正确无误。JUnit是Java中最常用的测试框架,它提供了一套断言方法和测试结构,便于验证代码的预期行为。 测试通常包括以下几个方面:...

    EasyMock 使用方法与原理剖析

    2. **单元测试**:单元测试是对程序中最小可测试单元进行验证,通常是一个方法。Mock对象在单元测试中用于隔离被测试代码与其他部分的依赖,确保测试的准确性。 3. **录制-回放-检查模式**:EasyMock 的核心工作...

    软件工程课程设计编码与测试.pdf

    虽然文档中未详细展开,但我们可以推测文档的其余部分可能涉及各种测试方法,如单元测试、集成测试、系统测试和验收测试。这将涵盖测试设计、测试用例的编写、测试执行以及缺陷跟踪。 7. 代码可读性与规范 由于文档...

Global site tag (gtag.js) - Google Analytics