java使用jUnit,jMockit,dbunit做DAO层单元测试方法
2015-12-27 03:07
966 查看
第一步:准备数据
先在MySQL数据库中填写测试数据和期望数据,然后导出到xml文件中。全表导出:DBUnitHelper.exportTable("t_dp_content_02001", TEST_DATA_FILE);
条件查询导出:DBUnitHelper.exportQueryTable("t_dp_content_02001","select * from t_dp_content_02001 where id=123020011", TEST_DATA_FILE);
xml文件路径举例:private static final String TEST_DATA_FILE = "src/test/resources/testdata/t_dp_content_02001.xml";
第二步:单元测试前清理数据
在执行单元测试前,需要准备测试数据,清理库表:调用DBUnitHelper.doCleanInsert(xml文件路径)方法将测试数据导入到数据库中,该方法不会删除测试数据以外的其它数据;
调用DBUnitHelper.deleteData(xml文件路径)方法,将测试过程中产生的新数据也删除;
也可以调用DBUnitHelper.doCleanTable(库表名)来清空库表。
代码举例:
@BeforeClass public static void setUp() throws Exception { Mockit.setUpMocks(); try { // 删除并重新插入测试数据 DBUnitHelper.doCleanInsert(TEST_DATA_FILE); // 删除测试过程中产生的新数据 DBUnitHelper.deleteData(EXPECT_DATA_FILE_1); } catch (Throwable e) { e.printStackTrace(); } }
第三步:编写单元测试用例
调用DAO层的方法,然后调用BaseDaoTest.assertEquals(期望数据文件,SQL语句,库表名,忽略比较的字段)方法判断数据库的数据变化是否符合预期。判断方法举例:
super.assertEquals(EXPECT_DATA_FILE_1,"select * from t_dp_content_02001 where id=3210200110", "t_dp_content_02001",new String[] {"logicKey", "lastUpdateTime"});
单元测试环境 pom.xml文件
<dependency> <groupId>com.panguso</groupId> <artifactId>pg-app-core</artifactId> <version>2.0.0-SNAPSHOT</version> </dependency> <!-- 单元测试依赖jar包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.dbunit</groupId> <artifactId>dbunit</artifactId> <version>2.4.8</version> <scope>test</scope> </dependency>
dbunit.properties配置文件(src/test/resources目录下)
###################################################### drivers=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://10.10.160.157:3306/opendata_unit?useUnicode=true&characterEncoding=utf8 jdbc.maxconn=5 jdbc.user=opendata_unit jdbc.password=opendata_unit_123 schema=opendata_unit ###################################################### sqlMapFilePath=sqlMapConfig_unit.xml
代码:
BaseContentDaoTest .java
package com.panguso.op.resource.core.dao; import junit.framework.Assert; import mockit.Expectations; import mockit.Mocked; import mockit.Mockit; import org.junit.BeforeClass; import org.junit.Test; import com.panguso.app.core.test.BaseDaoTest; import com.panguso.app.core.test.DBUnitHelper; import com.panguso.app.core.util.RandomUtil; import com.panguso.op.resource.core.dao.impl.PlainSequenceGenerator; import com.panguso.op.resource.core.po.Content; /** * * @author yangjianfei * @date 2012-11-22 */ public class BaseContentDaoTest extends BaseDaoTest { private static BaseContentDao contentDao; private static final String TEST_DATA_FILE = "src/test/resources/testdata/t_dp_content_02001.xml"; private static final String EXPECT_DATA_FILE_1 = "src/test/resources/testdata/expectation/t_dp_content_02001_1.xml"; private static final Long ID = 3210200110L; @BeforeClass public static void setUp() throws Exception { Mockit.setUpMocks(); try { ISequenceGenerator generator = new PlainSequenceGenerator(sqlMap); contentDao = new BaseContentDao(sqlMap, generator); DBUnitHelper.doCleanInsert(TEST_DATA_FILE); DBUnitHelper.deleteData(EXPECT_DATA_FILE_1); } catch (Throwable e) { e.printStackTrace(); } } @Mocked PlainSequenceGenerator sequenceGenerator; @Test public void testCRUD() { new Expectations() { { sequenceGenerator.getNextSequence(anyString); result = ID; times = 1; } }; Content content = contentDao.getBaseInfoById(123020011L); content.setId(null); content.setLogicKey(RandomUtil.generateLetterStr(10)); // 插入数据 contentDao.saveBaseInfo(content); Content content1 = contentDao.getBaseInfoById(ID); Assert.assertEquals(content.getContentState(), content1.getContentState()); super.assertEquals(EXPECT_DATA_FILE_1, "select * from t_dp_content_02001 where id=3210200110", "t_dp_content_02001", new String[] {"logicKey", "lastUpdateTime"}); } public static void main(String[] args) throws Exception { // DBUnitHelper.exportTable("t_dp_content_02001", TEST_DATA_FILE); DBUnitHelper.exportQueryTable("t_dp_content_02001", "select * from t_dp_content_02001 where id=123020011", TEST_DATA_FILE); // DBUnitHelper.doCleanInsert(TEST_DATA_FILE); // DBUnitHelper.deleteData(TEST_DATA_FILE); // DBUnitHelper.doInsert(TEST_DATA_FILE); } }
sqlMapConfig.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="false" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="true" /> <transactionManager type="JDBC" commitRequired="false"> <dataSource type="dbcp"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:mysql://10.10.160.157:3306/opendata_unit?useUnicode=true&characterEncoding=utf8" /> <property name="JDBC.Username" value="opendata_unit" /> <property name="JDBC.Password" value="opendata_unit_123" /> <property name="Pool.MaximumActiveConnections" value="2" /> <property name="Pool.MaximumIdleConnections" value="1" /> <property name="Pool.MaximumCheckoutTime" value="120000" /> <property name="Pool.TimeToWait" value="500" /> <property name="Pool.PingQuery" value="select 1 from t_userinfo" /> <property name="Pool.PingEnabled" value="false" /> <property name="Pool.PingConnectionsOlderThan" value="1" /> <property name="Pool.PingConnectionsNotUsedFor" value="1" /> </dataSource> </transactionManager> <sqlMap resource="com/panguso/op/resource/core/dao/sql/ResourceSQL.xml" /> <sqlMap resource="com/panguso/op/resource/core/dao/sql/ContentSQL.xml" /> <sqlMap resource="com/panguso/op/resource/core/dao/sql/SequenceSQL.xml" /> <sqlMap resource="com/panguso/op/resource/core/dao/sql/MetaDataSQL.xml" /> <sqlMap resource="com/panguso/op/resource/core/dao/sql/DataPartnerSQL.xml" /> <sqlMap resource="com/panguso/op/resource/core/dao/sql/ResourceContentListenerSQL.xml" /> </sqlMapConfig>
相关文章推荐
- Eclipse Debug 教程
- java(一)编程工具的下载与环境变量的配置
- MYECLIPSE 2014 有用的几个快捷键
- [转]Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- JavaScrip——练习(做悬浮框)
- Java 用Servlet+JDBC 结合Sqlsever 实现用户注册
- Struts2的值栈详解
- 双缓冲解决Java绘图严重闪烁
- Java判断相等(==和equals()方法)
- leetcode:82. Remove Duplicates from Sorted List II(Java)解答
- java.lang.Integer源码分析
- 【ActiveMQ教程】点对点(Point-to-Point)消息教程
- 【ActiveMQ教程】发布/订阅(Publish/Subscribe)消息教程
- JAVA基础----函数
- JAVA8DateTime API
- Java常见知识点
- 【翻译】Java泛型中的extends与super
- eclipse插入数据库 乱码
- java基础之文件
- java基础之I/O流