在我們對數據庫 DAO 類進行單元測試時,通常不應該依賴於一個外部數據庫,所以會選用特定比較接近於真實數據庫類型的內存或嵌入式數據庫,如 HSQLDB(HyperSQL), H2, Derby 等。但總難免會用到特定數據庫的特性,這時候就無法用前述各種數據庫進行測試了。非要單元測試中覆蓋到所用的數據庫特性的話可以選擇用 docker,如 Testcontainers, 經過模塊擴展,它可以由 docker 來啓動許多種類型的數據庫,MySQL, Postgres, Oracle-XE, MS SQL Server, Couchbase 等等,詳情見 Database containers。剛瞭解到的是它的模塊化的無限可能,像支持 Kafka Containers 和 Localstack Module 等。
這裏就不走 Testcontainers 那條路 -- 要求構建服務器上也要有 docker。早先希望能找到一種嵌入式或內存 PostgreSQL 數據庫,後來發現 PostgreSQL 未能提供 In-Process 和 In-Memory 的啓動方式,好在 PostgreSQL 是開源,有人可以把它改造爲小型的可由測試代碼啓停的本地數據庫。有兩個具有代表性的組件,分別是 OpenTable Embedded PostgreSQL Component 和 Embedded PostgreSQL Server,它們都號稱是 Embedded,所謂嵌入式,其實是進測試進程外的數據庫。
下面簡單體驗下兩個組件的用法 閱讀全文 >>