簡體   English   中英

使用模擬數據庫進行JUnit測試

[英]JUnit tests using a mock database

我正在開發一個測試不同WebServices的應用程序,並且希望它盡可能通用。 我需要填充數據庫以進行JUnit測試,但是我不希望這些更改被提交。 我知道某些內存數據庫(例如HSQL DB)允許在某種虛擬(或模擬)數據庫上進行測試,但是不幸的是,我使用oracle,由於我的數據表結構復雜,現在無法更改它。

您建議的最佳做法是什么? 謝謝。

首先,HSQL和Hibernate沒有任何關系。 問題是您是否可以找到一個支持與生產數據庫相同的SQL(或應用程序使用的SQL子集)的嵌入式數據庫。

H2數據庫是一個很好的選擇,因為它可以模擬許多不同的SQL風格。

最重要的是:不要測試數據庫。 假定您的供應商對數據庫進行了全面測試,並且可以正常工作。

在我的代碼中,我的目標是:

  1. 保存並加載每個實體。

  2. 為我使用的所有查詢生成SQL,並將它們與測試中的String文字進行比較(即,我不會一直對數據庫運行查詢)。

  3. 一些測試會尋找系統屬性。 如果已設置,那么他們將對數據庫運行查詢。 這是在夜間在我的CI服務器上發生的。

這樣做的理由:只要數據庫架構不變,就沒有必要實際運行查詢。 這意味着在我坐在電腦前的白天運行它們會浪費大量時間。

為了確保“低影響”更改不會漏掉間隙,我不在乎時讓計算機運行它們。

同樣,我有許多DAO的模擬,這些DAO返回各種預定義的結果,因此我不必查詢數據庫。 這里的基本原理是我要測試數據庫中結果的處理,而不是JDBC API,DB驅動程序,OS的TCP / IP堆棧,網絡硬件(和軟件)或我之間的1000項中的任何其他項代碼和數據庫記錄在硬盤上的某個位置。

在我的博客中有更多詳細信息: http : //blog.pdark.de/2008/07/26/testing-with-databases/

暫無
暫無

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

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