簡體   English   中英

使用Java模擬MySQL服務器

[英]Mocking a MySQL server with Java

由於我不是很熟悉數據庫,一些細節可能不相關,但我會包括所有內容:

作為我大學項目的一部分,我們正在創建一個使用JSP,servlet並使用MySQL服務器作為后端的網站。

我負責在DB上設置表,並創建Java類以與之交互。 但是,我們只能從大學內部連接到MySQL服務器,而我們所有人(7人)主要在家工作。

我正在創建一個接口QueryHandler ,它有一個接受字符串(表示查詢)並返回ResultSet 我的問題是:如何創建一個實現此接口的類,它將模擬數據庫並允許其他人使用不同的DBHandler並且不知道差異並允許我在不連接到實際MySQL數據庫的情況下測試不同的查詢?

編輯 :我不太確定SQL數據庫之間的差異,但顯然我在MySQL上運行的所有查詢都應該在mock上運行。

為什么不安裝自己的MySQL數據庫進行測試? 它可以在Windows,Mac和Linux上運行,並且資源不會太多。 我把它安裝在筆記本電腦上進行本地測試。

您的API似乎存在缺陷。 您不應該將ResultSet返回給客戶端。 通過這樣做,您永遠迫使您的客戶依賴關系數據庫后端。 您的數據訪問層需要隱藏數據實際結構和存儲方式的所有詳細信息。

請考慮返回List或允許客戶端提供數據訪問組件可以寫入的Stream,而不是返回ResultSet。

這將使單元測試對API的客戶端變得微不足道,並允許您隨意交換存儲機制。

嘗試德比 如果您不介意在返回SqlServer時更改驅動程序,那么它是一個可用於測試的免費服務器。 您可以運行的查詢類型可能有限。 我不確定SqlServer是否在標准SQL之外有任何特殊語法。

如何使用HSQLDB進行離線測試? 它不會像MySQL數據庫那樣表現,但它是一個內存快速的SQL數據庫,可以滿足您的大部分需求。

根據我的經驗,最好的方法是多個數據庫實例和/或模式。 通常情況下,每個用戶都有一個用於對正在運行的應用程序進行開發/健全檢查的開發,一個用於運行單元測試的自動構建,一個用於每個用戶運行單元測試。 當然還有用於演示,集成測試的實例/模式。 除了實際的一面,能夠做到這一點確保部署/升級app /數據庫也將非常接近完美。

假設您有一個DAO層,那么需要在單元測試級別訪問真實數據庫的唯一代碼是DAO實現,業務層應該使用模擬DAO實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM