写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来实现创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)数据,以及结合JUnit进行单元测试确保代码的正确性。 首先,我们要理解JDBC的基本工作流程: 1. 加载驱动:使用...
### JDBC、异常与单元测试重点解析 #### 一、JDBC概述 JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供...
jdbc详细测试用例,包括connection ,statement,preparedstatement,resultset,BeanUtils,DBUtils,数据库连接池dbcp,cp03的单元测试,及dao层的统一封装,适合项目开发人员学习和项目中使用。
【JSP单元测试题JNDI -JAVA Naming and Directory interface】 JNDI(JAVA Naming and Directory interface)是Java平台提供的一套接口和API,用于访问各种命名和目录服务,如DNS、LDAP等。通过JNDI,开发者可以...
通过使用Mockito,我们可以虚拟出一个外部依赖,这样可以降低测试组件之间的耦合度,使得我们能更专注于代码的流程和结果,从而更好地实现测试目的。 在具体的使用场景中,例如,对于一些不容易构造或者获取的对象...
4. `unittest1.properties`, `unittest2.properties`, `unittest3.properties`:可能分别对应不同的单元测试环境,每个环境有不同的P6Spy配置。 5. `p6spy_diff.txt`、`p6spy_diff2.txt`:这些文件可能包含了P6Spy...
总的来说,这个"java jdbc 测试项目"提供了一个学习和实践JDBC操作数据库的好平台,包括了基本的JDBC工具类实现、数据库连接配置以及使用JUnit进行单元测试。通过这个项目,开发者可以深入理解JDBC的工作原理,提高...
- **单元测试**:使用JUnit进行单元测试。 - **集成测试**:确保各个组件之间的协作正确无误。 #### 七、JDBC对事务的支持 **7.1 模拟转账** - 示例代码展示了如何使用JDBC进行转账操作,并确保操作的原子性。 *...
2. 查询:使用Statement的executeQuery方法获取ResultSet,遍历结果集检查预期数据。 3. 更新:执行`UPDATE table SET column = value WHERE condition`语句,然后通过查询验证更新是否成功。 4. 删除:执行`...
测试代码通常包括单元测试和集成测试,确保数据库操作的正确性。可能使用JUnit或类似的测试框架,模拟不同的输入和预期输出,验证查询的正确性,异常处理机制以及事务管理等。 在“db”这个文件夹中,可能会包含...
JUnit是Java编程语言的一个单元测试框架,它使得测试代码的编写变得简单而规范。在本场景中,我们将讨论如何使用JDBC连接MySQL数据库,并通过JUnit进行测试。 1. **JDBC基础**: - JDBC驱动:为了连接MySQL,我们...
在实际的测试场景中,我们可能会使用JUnit等单元测试框架来编写测试代码,确保其可重复性和可维护性。此外,可以使用Mockito等库模拟数据库交互,以便在没有真实数据库的情况下进行测试。 压缩包中的"DBTest"可能是...
在进行测试时,使用单元测试框架,如JUnit,可以帮助自动化测试过程。可以为每个数据库操作编写单独的测试方法,确保每个操作的正确性。此外,Mockito等库可用于模拟数据库交互,以隔离测试,避免在测试中实际访问...
//显示查询出来的结果------------------ ResultSetMetaData rmeta = rs.getMetaData(); //获得数据字段个数 int numColumns = rmeta.getColumnCount(); while(rs.next()) { for(int i = 0;i;...
在本测试项目中,我们可能使用了`junit`框架来编写单元测试,确保每个JDBC操作都正确无误。JUnit是Java中最常用的测试框架,它提供了一套断言方法和测试结构,便于验证代码的预期行为。 测试通常包括以下几个方面:...
2. **单元测试**:单元测试是对程序中最小可测试单元进行验证,通常是一个方法。Mock对象在单元测试中用于隔离被测试代码与其他部分的依赖,确保测试的准确性。 3. **录制-回放-检查模式**:EasyMock 的核心工作...
虽然文档中未详细展开,但我们可以推测文档的其余部分可能涉及各种测试方法,如单元测试、集成测试、系统测试和验收测试。这将涵盖测试设计、测试用例的编写、测试执行以及缺陷跟踪。 7. 代码可读性与规范 由于文档...