使用dbunit測試spring + mybatis的資料庫應用
單元測試對提高程式質量的作用毋庸置疑, 本文將用實際的例子來介紹如何測試面向資料庫的應用程式。 剛接觸單元測試的同學常常會疑惑什麼東西需要測試什麼東西不需要測試, 而對於面向資料庫的程式, 我們的主要邏輯往往是在sql上,我們寫了很多sql語句來完成應用需要的操作, sql語句執行是否正確和應用是否正確關聯性極強。 對於這類程式我們可以用dbunit來做測試。
本文介紹如何使用dbunit來測試spring + mybatis這種訪問資料庫的框架組合。
我用一個簡單的demo來介紹如何做資料庫的單元測試,專案的結構如下:
下面我逐個介紹專案中涉及dbunit單元測試的部分, 首先是我們新建了一個maven專案,要在此專案中做dbunit的單元測試,我們需要在pom檔案中引用spring-test, junit, dbunit,以及h2相關的maven依賴, spring-test用來載入spring配置檔案,h2用來模擬mysql執行sql語句,這裡我們不用mysql或者其他資料庫,而是用記憶體資料庫h2,這是出於兩個原因考慮的,一是h2是記憶體資料庫,測試執行起來更快; 二是h2是java內建資料庫,不管是在什麼環境下,只要有java,測試用例就可以跑起來, 不必連真正的資料庫。
pom.xml檔案中新增的單元測試相關依賴項如下:
junit junit ${junit.version} test org.dbunit dbunit ${dbunit.version} test org.springframework spring-test ${spring.version} test com.h2database h2 ${h2.version} test
下一步我們定義了NoteDao介面,在這個介面中有對Note表相關的添查改刪操作的方法, 然後我們在NoteMapper中寫了四個方法對應的sql語句,這些內容和我們平時使用mybatis沒什麼兩樣,這裡不做詳述。
我們在src/test/java中新增NoteDaoTest類,用來測試NoteDao類,此類的內容如下,請注意看註釋:
package hello; import cn.outofmemory.dbunit.dao.NoteDao; import cn.outofmemory.dbunit.entity.Note; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.Date; /** * NoteDao實現的測試類 * * 這個類必須有@RunWith(SpringJUnit4ClassRunner.class)直接指定使用spring測試, @ContextConfiguration 註解指定要使用此單元測試類需要預先載入的spring配置檔案 * * Created by yukaizhao on 2015/10/26. */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"/spring/spring-dao.xml"}) public class NoteDaoTest { /** * 使用@Autowired註解自動注入NoteDao測試類 */ @Autowired private NoteDao noteDao; /** * 測試NoteDao的insert方法, 此處我們構造了一個Note物件,然後將起insert到資料庫 */ @Test public void insertTest() { Note note = new Note(); note.setTitle("test title"); note.setContent("test content"); note.setCreateTime(new Date()); noteDao.insert(note); //此處透過驗證note的id屬性是否為正整數來驗證插入是否成功 Assert.assertTrue(note.getId() > 0); } /** * 測試更新操作 */ @Test public void updateTest() { Note note = new Note(); note.setId(1); String newTitle = "new Title"; note.setTitle(newTitle); String newContent = "new Content"; note.setContent(newContent); int effectRows = noteDao.update(note); //此處透過update操作返回的受影響行數來斷定update操作是否執行成功 Assert.assertTrue (effectRows == 1); } /** * 測試delete操作 */ @Test public void deleteTest() { int wantDeleteId = 2; int effectRows = noteDao.delete(wantDeleteId); //透過驗證受影響行數來斷定是否成功執行操作 Assert.assertEquals(1, effectRows); } /** * 測試select操作 */ @Test public void selectTest() { int selectId = 3; Note note = noteDao.selectNoteById(selectId); //透過select出的note的id屬性來斷言是否成功 Assert.assertEquals(selectId, note.getId()); } }
這裡的所有測試都需要初始化資料庫,並且在資料庫中初始化一些資料來做測試操作,這個初始化的操作,是在src/test/resources/spring/spring-dao.xml檔案中定義的,我們看下spring-dao.xml檔案中測試資料來源定義和測試資料初始化bean定義的內容:
上面的dataSource Bean的driverClassName是org.h2.Driver, 而url是h2的記憶體資料庫的url連線。 在jdbc:initialize-database bean中定義了在資料庫的初始階段要執行兩個指令碼sql/ddl.sql和dml.sql兩個指令碼。
經過這些配置之後,你就可以執行spring+mybatis的單元測試了,我們秀一個測試結果
4個方法全部測試透過。
我們總結下使用dbunit測試spring+mybatis應用的db操作步驟, 首先要配置pom檔案引入必要依賴,然後需要在src/test/resources中新增spring配置檔案,定義測試所需要的資料來源和資料庫初始化, 然後需要在寫單元測試時在初始化sql中新增必要的資料表定義和資料初始化指令碼。
最後為大家奉上整個demo專案, 文中未盡事宜,請透過demo專案瞭解,如果還有不解之處,請留言探討。
原文連結:outofmemory.cn/Java/test-spring-mybatis-database-application-with-dbunit
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4422/viewspace-2805465/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring、Spring Boot和TestNG測試指南 – 整合測試中用Docker建立資料庫Spring BootDocker資料庫
- oracle測試資料庫啟用Oracle資料庫
- 使用混沌候攻擊測試Spring Boot應用Spring Boot
- Spring Boot MyBatis配置多種資料庫Spring BootMyBatis資料庫
- 研究資料庫-如何使用mybatis資料庫MyBatis
- Spring Boot入門(七):使用MyBatis訪問MySql資料庫(xml方式)Spring BootMyBatisMySql資料庫XML
- Spring AI中使用嵌入模型和向量資料庫實現RAG應用SpringAI模型資料庫
- 使用 Bytebase 管理 Rainbond 上的應用資料庫AI資料庫
- Spring Boot應用中如何動態指定資料庫,實現不同使用者不同資料庫的場景Spring Boot資料庫
- 大資料測試與 傳統資料庫測試大資料資料庫
- 資料庫測試指南資料庫
- Spring Boot入門(六):使用MyBatis訪問MySql資料庫(註解方式)Spring BootMyBatisMySql資料庫
- 使用jest測試Koa應用
- MyBatis Java 和 資料庫 資料型別對應表MyBatisJava資料庫資料型別
- 開發者測試-採用精準測試工具對Spring Boot應用進行測試Spring Boot
- 生產資料庫、開發資料庫、測試資料庫中的資料的區分資料庫
- 如何使用Spring Boot和Flyway建立不同資料庫的多租戶應用? - reflectoring.ioSpring Boot資料庫
- 應用適配資料庫還是資料庫適配應用資料庫
- PHP 單元測試與資料庫測試PHP資料庫
- 2.4. 測試資料庫資料庫
- Laravel 中使用整合測試時的資料庫設定方法Laravel資料庫
- 【星雲測試】開發者測試-採用精準測試工具對Spring Boot應用進行測試Spring Boot
- 【mybatis annotation】資料層框架應用--Mybatis(二) 基於註解實現資料的CRUDMyBatis框架
- MySQL製作具有千萬條測試資料的測試庫MySql
- oracle資料庫資料字典應用Oracle資料庫
- [資料庫]000 - ?Sysbench 資料庫壓力測試工具資料庫
- Spring Boot中使用PostgreSQL資料庫Spring BootSQL資料庫
- 使用 @Audited 增強Spring Boot 應用程式的資料審計能力Spring Boot
- 大資料技術與應用課堂測試-資料清洗同步大資料
- 以資料思維和技能提升資料應用測試實踐
- 來 ! 玩玩PHPUnit的資料庫測試 (上)PHP資料庫
- Oracle 閃回資料庫測試Oracle資料庫
- PostgreSQL:資料庫連結測試SQL資料庫
- MySQL 資料庫生成 10000 條測試資料MySql資料庫
- 測試面試(三)--資料庫與linux面試資料庫Linux
- 使用 Moq 測試.NET Core 應用 -- 其它
- 2.8 使用資料庫服務管理應用負載資料庫負載
- 使用SqlDependency監測資料庫SQL資料庫