使用H2數(shù)據(jù)庫進行單元測試
背景
H2 數(shù)據(jù)庫是一個開源的嵌入型內存數(shù)據(jù)庫,采用純Java語言實現(xiàn);
程序非常小巧輕便,整個完整的Jar包也只有1.5M左右,很容易集成到項目中。
官網(wǎng)地址
http://www.h2database.com/html/main.html
在數(shù)據(jù)存儲的場景中,為什么會使用內存數(shù)據(jù)庫?常見的出發(fā)點可能有:
- 計算資源限制,如嵌入式計算環(huán)境中,由于CPU、內存、Disk等限制,要求采用小巧的數(shù)據(jù)庫存儲方案;
- 項目預研,在項目立項之前可能無法立即采購昂貴的數(shù)據(jù)庫軟件,此時往往可以退而選擇臨時解決方案,利用JDBC協(xié)議的通用性在后期完成切換;
- 自動化測試,在自動化環(huán)境中可能需要大量模擬接口,包括數(shù)據(jù)存儲接口,此時內存數(shù)據(jù)庫是不二之選。
單元測試的場景也屬于自動化測試,下面主要闡述H2 數(shù)據(jù)庫在項目單元測試中的典型應用。
單元測試的痛點
一個 Junit單元測試的流程包括
- 初始化數(shù)據(jù)
- 執(zhí)行測試
- 銷毀數(shù)據(jù)
在真實的測試代碼開發(fā)中,有幾類問題會造成困擾:
-
數(shù)據(jù)庫環(huán)境的搭建
搭建一套完整的數(shù)據(jù)庫往往比較耗時,然而一旦將數(shù)據(jù)庫配置加入測試范圍,就必須長期維護其穩(wěn)定性;
這同時也會帶來代碼庫同步的困擾。 -
保證數(shù)據(jù)庫的"干凈"
大多數(shù)情況下,每個測試用例在啟動前(初始化數(shù)據(jù))都期望數(shù)據(jù)庫是"干凈"的狀態(tài);然而使用真實的數(shù)據(jù)庫卻很難保證這點,原因是:- 多個應用可能會共享一個物理數(shù)據(jù)庫;
- 測試用例在銷毀數(shù)據(jù)時很難保證完全清除,可能一次意外的調試也會產(chǎn)生垃圾數(shù)據(jù);
H2內存數(shù)據(jù)庫很好的解決了上述問題,本身作為嵌入式數(shù)據(jù)庫并不需要額外的看護成本;在程序退出時,所有數(shù)據(jù)都能保證完全清除。
如何使用
maven 依賴
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.190</version>
<scope>test</scope>
</dependency>
在springboot 使用H2數(shù)據(jù)庫非常方便:
application.properties
# 數(shù)據(jù)源連接
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=root
spring.datasource.password=
# DDL腳本
spring.datasource.schema=classpath:script/test-schema.sql
# DML腳本
spring.datasource.data=classpath:script/test-data.sql
作者: 美碼師(zale)
出處: http://www.rzrgm.cn/littleatp/, 如果喜歡我的文章,請關注我的公眾號
本文版權歸作者和博客園共有,歡迎轉載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出 原文鏈接 如有問題, 可留言咨詢.
浙公網(wǎng)安備 33010602011771號