1. 程式人生 > >java使用jUnit,jMockit,dbunit做DAO層單元測試方法

java使用jUnit,jMockit,dbunit做DAO層單元測試方法

第一步:準備資料

先在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(庫表名)來清空庫表。

程式碼舉例:

@BeforeClasspublicstaticvoid setUp()throwsException{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",newString[]{"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&amp;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
 */publicclassBaseContentDaoTestextendsBaseDaoTest{privatestaticBaseContentDao contentDao;privatestaticfinalString TEST_DATA_FILE ="src/test/resources/testdata/t_dp_content_02001.xml";privatestaticfinalString EXPECT_DATA_FILE_1 ="src/test/resources/testdata/expectation/t_dp_content_02001_1.xml";privatestaticfinalLong ID =3210200110L;@BeforeClasspublicstaticvoid setUp()throwsException{Mockit.setUpMocks();try{ISequenceGenerator generator =newPlainSequenceGenerator(sqlMap);
            contentDao =newBaseContentDao(sqlMap, generator);DBUnitHelper.doCleanInsert(TEST_DATA_FILE);DBUnitHelper.deleteData(EXPECT_DATA_FILE_1);}catch(Throwable e){
            e.printStackTrace();}}@MockedPlainSequenceGenerator sequenceGenerator;@Testpublicvoid testCRUD(){newExpectations(){{
                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",newString[]{"logicKey","lastUpdateTime"});}publicstaticvoid main(String[] args)throwsException{//      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><settingscacheModelsEnabled="true"enhancementEnabled="true"lazyLoadingEnabled="true"errorTracingEnabled="false"maxRequests="32"maxSessions="10"maxTransactions="5"useStatementNamespaces="true"/><transactionManagertype="JDBC"commitRequired="false"><dataSourcetype="dbcp"><propertyname="JDBC.Driver"value="com.mysql.jdbc.Driver"/><propertyname="JDBC.ConnectionURL"value="jdbc:mysql://10.10.160.157:3306/opendata_unit?useUnicode=true&amp;characterEncoding=utf8"/><propertyname="JDBC.Username"value="opendata_unit"/><propertyname="JDBC.Password"value="opendata_unit_123"/><propertyname="Pool.MaximumActiveConnections"value="2"/><propertyname="Pool.MaximumIdleConnections"value="1"/><propertyname="Pool.MaximumCheckoutTime"value="120000"/><propertyname="Pool.TimeToWait"value="500"/><propertyname="Pool.PingQuery"value="select 1 from t_userinfo"/><propertyname="Pool.PingEnabled"value="false"/><propertyname="Pool.PingConnectionsOlderThan"value="1"/><propertyname="Pool.PingConnectionsNotUsedFor"value="1"/></dataSource></transactionManager><sqlMapresource="com/panguso/op/resource/core/dao/sql/ResourceSQL.xml"/><sqlMapresource="com/panguso/op/resource/core/dao/sql/ContentSQL.xml"/><sqlMapresource="com/panguso/op/resource/core/dao/sql/SequenceSQL.xml"
            
           

相關推薦

java使用jUnit,jMockit,dbunitDAO單元測試方法

第一步:準備資料 先在MySQL資料庫中填寫測試資料和期望資料,然後匯出到xml檔案中。 全表匯出:DBUnitHelper.exportTable("t_dp_content_02001", TEST_DATA_FILE); 條件查詢匯出:DBUnitHelper

SpringMVC : Controller單元測試Mock

程式碼 @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(locations = { "classpath:applicationContext.

用 Swift 編寫網路單元測試

單元測試主要用來檢測某個工作單元的結果是否符合預期,以此保證該工作單元的邏輯正確。上次寫封裝一個 Swift-Style 的網路模組的時候在結尾提了一下單元測試的重要性,評論中有朋友對網路層的單元測試有一些疑惑。我推薦他去看《單元測試的藝術》(這本書讓我對單元測試有了新的認識),但由於該書是以 C# 為例寫

使用指令碼語言 簡簡單單C/C++單元測試(之一)

先介紹基本概念:單元測試(unit testing),是指對軟體中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,一般來說,要根據實際情況去判定其具體含義,如C語言中單元指一個函式,Java裡單元指一個類,圖形化的軟體中可以指一個視窗或一個選單等。總的來說,單元就

【騰訊TMQ】【測試左移專欄】用Powermock和Mockito來安卓單元測試

作者:ZeusL 團隊:騰訊移動品質中心TMQ 一、單元測試及Android單元測試簡介 慣例,先簡單介紹下理論知識,懂得的可以跳過。 1、單元測試定義和特性 單測定義: 在計算機程式設計中,單元測試(Unit Testing)又稱為模組測試,

持續整合之路——資料訪問單元測試遇到的問題

在編寫資料訪問層的單元測試時,遇到不少問題,有些問題可以很容易Google到解決方法,而有些只能自己研究解決。這裡分享幾個典型的問題以及解決方法。先交代一下用到的測試框架 Spring Test + SpringTestDbUnit + DbUnit。一、先說一個低階的問題。

關於SpringBoot框架下的service單元測試問題(mockito)

mockito的官方文件:   關於Junit測試業務邏輯層中出現的【方法的輸入輸出沒有規範、測試高度依賴spring boot上下文環境、測試用例不完整等】這些問題,我們使用更完整的測試方法來解決。 學習原因:   針對最近遇到的問題:在Spri

.netcore持續整合測試篇之MVC單元測試

前面我們講的很多單元測試的的方法和技巧不論是在.net core和.net framework裡面都是通用的,但是mvc專案裡有一種比較特殊的類是Controller,首先Controller類的返回結果跟普通的類並不一樣,普通的類返回的都是確定的型別,而mvc專案的返回的ActionResult或者core

單元測試方法以及實例

testing reat 測試用例 request uri 異常 .data author 為什麽 為什麽要測試? Web程序開發過程一般包括以下幾個階段:[需求分析,設計階段,實現階段,測試階段]。其中測試階段通過人工或自動來運行測試某個系統的功能。目的是檢驗其是否滿足需

【Android】單元測試方法簡介

前言 基本單元測試框架 Java單元測試框架:Junit、Mockito、Powermockito等; Android單元測試框架:Robolectric、AndroidJUnitRunner、Espresso等。 最開始建議先學習Junit & Mockito。

Java基礎 @org.junit.Test-單元測試方法 + 操縱Collection和Map的工具類 : Collections 的sort/binarySearch/max/min等靜態方法

單元測試程式碼:   ( 在IDEA中先輸入'@Test '然後根據提示進行自動修訂即可!!執行時直接執行即可!         若有多個單元測試塊的時候,直接把滑鼠放在哪裡就自動在哪裡執行那個單元塊) import java.util.*; /**操縱Collection和Map

對web專案的單元測試方法

1 HttpClient模擬請求,需要開啟伺服器 /* Map<String,String> param = new HashMap<String,String>(); param.put("businesstype", "1006"); para

MVC對Dao的解決方法(MVC的設計)

在實際的開發過程中,Dao層負責對資料庫的訪問,但是在操作中會發現有很多的操作時很類似的,唯一有區別的就是對相對應的實體操作有區別。 解決方法:新建一個InterfaceBaseDao publicinterface BaseDao { public List getAl

hadoop單元測試方法--使用和增強MRUnit[1]

hadoop單元測試方法--使用和增強MRUnit 1前言 hadoop的mapreduce提交到叢集環境中出問題的定位是比較麻煩的,有時需要一遍遍的修改程式碼和打出日誌來排查一個很小的問題,如果資料量大的話除錯起來相當耗時間。因此有必要使用良好的單元測試手段來儘

【SpringBoot】整合JPA啟動基於JPA的單元測試方法報如下錯誤:could not initialize proxy

出現該錯誤,分析了一下原因:基於JPA的實現來說,在進行資料庫訪問的時候,針對資料庫的訪問與操作session已經關閉釋放了。 百度了一下,網上有如下解決方案: 第一種方案:在@OneToMany的引數中使用fetch=FetchType=Eager 未涉及到該註解的使

C#的單元測試方法

一、         單元測試 是軟體測試方法的其中一種,其中還有比如動態黑盒測試、資料測試、破壞性測試等等。 單元測試也稱之為“模組測試”,是對程式設計中的最小單元——函式進行測試的一種方法,所謂測

python unittest單元測試方法和用例

python內部自帶了一個單元測試的模組,pyUnit也就是我們說的:unittest 先介紹下unittest的基本使用方法: 1.import unittest 2.定義一個繼承自unittest.TestCase的測試用例類 3.定義setUp和tearDown,在

SpringBoot開發Junit單元測試方法

最近在做基於SSM框架的開發,使用SpringBoot代替了SpringMVC,怎麼使用Junit單元測試呢? 首先在該服務的pom檔案中新增支援junit的依賴: 然後在src/test/java 目錄下新增一個父類,用來setup WebApplicationCo

熟悉Junit單元測試方法

imp 項目 tno public ESS mat leave .com parameter 定義: JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源於Kent Beck的sUnit的xUnit家族中最為成功的一個

springboot 對dao介面進行單元測試-springboot(4)

前言 接著之前的springboot專案,來寫springboot對dao層介面測試。 正文 之前我的springboot專案在初始化就自動引入了測試依賴,所以無需再次引入其他。 新增函式 mybatis自動生成了6個基本函式,但是開發中這些函式遠遠不夠