創建內存數據庫結構,我有很多地方「單位」測試使用其執行期間到Oracle數據庫真正連接的應用程序。從Oracle實例
你可以想像,這些測試需要太多的時間來執行,因爲他們需要初始化一些Spring上下文的,並傳達到Oracle實例。除此之外,我們還要管理複雜的機制,如交易,以避免在測試執行後,對數據庫的修改(即使我們使用有用的類從春天像AbstractAnnotationAwareTransactionalTests
)。
所以我的想法是由內存數據庫,逐步替換該Oracle測試實例。我會用hsqldb
或者更好的h2
。
我的問題是要知道什麼是做到這一點的最好的辦法。我主要關心的是內存數據庫結構的構建和參考數據的插入。
當然,我可以提取從Oracle數據庫結構,使用一些工具,如SQL Developer
或TOAD
,然後修改這些腳本以使其適應hsqldb
或h2
語言。但我不認爲這是更好的方法。
事實上,我已經做到了使用hsqldb
另一個項目,但我已經寫了手動所有的腳本來創建表。幸運的是,我只有幾張桌子可以創作。此步驟中的主要問題是將用於創建表的Oracle腳本「翻譯」爲hsqldb
語言。
例如,使用下面的SQL命令在Oracle中創建一個表:
CREATE TABLE FOOBAR (
SOME_ID NUMBER,
SOME_DATE DATE, -- Add primary key constraint
SOME_STATUS NUMBER,
SOME_FLAG NUMBER(1) DEFAULT 0 NOT NULL);
需要被 「翻譯」 爲hsqldb
到:
CREATE TABLE FOOBAR (
SOME_ID NUMERIC,
SOME_DATE TIMESTAMP PRIMARY KEY,
SOME_STATUS NUMERIC,
SOME_FLAG INTEGER DEFAULT 0 NOT NULL);
在我目前的項目中,有太多很多表格要手動完成...
所以我的問題:
- 你可以給我什麼建議,以實現這一目標?
- 是否
h2
或hsqldb
提供一些工具來生成一個Oracle連接的腳本?
技術信息
的Java 1.6,Spring 2.5中,甲骨文10。克,Maven的2
編輯
關於我的單元測試的一些信息:
在我以前hsqldb
的應用程序,我有以下測試: - 一些 「基本」 單元測試,這與DB無關。 - 對於DAO測試,我使用hsqldb
來執行數據庫操作,如CRUD。 - 然後,在服務層上,我使用Mockito
來模擬我的DAO對象,以便專注於服務測試而不是整個應用程序(即service + dao + DB)。
在我當前的應用程序中,我們遇到了最糟糕的情況:DAO層測試需要運行Oracle連接。服務層確實使用而不是使用任何模擬對象來模擬DAO。所以服務測試也需要一個Oracle連接。
我知道mock和內存數據庫是兩個分離點,我會盡快解決它們。但是,我的第一步是嘗試通過內存數據庫刪除Oracle連接,然後我將使用我的Mockito
知識來增強測試。
請注意,我也希望將單元測試與集成測試分開。後者需要訪問Oracle數據庫才能執行「真實」測試,但我主要關心的問題(這是這個問題的目的)是幾乎所有的單元測試都不是單獨運行。
考慮到DAO代碼似乎與Oracle緊密結合,並且DAO無法被抽象出來,這似乎是最好的方法 - 儘管希望DAO代碼不依賴任何Oracle特性。最好儘快抽象出DAO ...... – 2010-09-24 17:12:53