使用H2數據庫進行單元測試


背景

H2 數據庫是一個開源的嵌入型內存數據庫,采用純Java語言實現;
程序非常小巧輕便,整個完整的Jar包也只有1.5M左右,很容易集成到項目中。

官網地址
http://www.h2database.com/html/main.html

在數據存儲的場景中,為什么會使用內存數據庫?常見的出發點可能有:

  1. 計算資源限制,如嵌入式計算環境中,由於CPU、內存、Disk等限制,要求采用小巧的數據庫存儲方案;
  2. 項目預研,在項目立項之前可能無法立即采購昂貴的數據庫軟件,此時往往可以退而選擇臨時解決方案,利用JDBC協議的通用性在后期完成切換;
  3. 自動化測試,在自動化環境中可能需要大量模擬接口,包括數據存儲接口,此時內存數據庫是不二之選。

單元測試的場景也屬於自動化測試,下面主要闡述H2 數據庫在項目單元測試中的典型應用。

單元測試的痛點

一個 Junit單元測試的流程包括

  1. 初始化數據
  2. 執行測試
  3. 銷毀數據

在真實的測試代碼開發中,有幾類問題會造成困擾:

  1. 數據庫環境的搭建
    搭建一套完整的數據庫往往比較耗時,然而一旦將數據庫配置加入測試范圍,就必須長期維護其穩定性;
    這同時也會帶來代碼庫同步的困擾。

  2. 保證數據庫的"干凈"
    大多數情況下,每個測試用例在啟動前(初始化數據)都期望數據庫是"干凈"的狀態;然而使用真實的數據庫卻很難保證這點,原因是:

    • 多個應用可能會共享一個物理數據庫;
    • 測試用例在銷毀數據時很難保證完全清除,可能一次意外的調試也會產生垃圾數據;

H2內存數據庫很好的解決了上述問題,本身作為嵌入式數據庫並不需要額外的看護成本;在程序退出時,所有數據都能保證完全清除。

如何使用

maven 依賴

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.190</version>
    <scope>test</scope>
</dependency>

在springboot 使用H2數據庫非常方便:

application.properties

# 數據源連接
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driver-class-name=org.hsqldb.jdbcDriver
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM