2013-02-12 68 views
2

我有很多訪問數據庫的DAO測試。 我試圖在內存數據庫中使用Java來模擬它們,比如H2。 但問題是ddl腳本包含分區聲明,這似乎不被H2支持。 我基本上想使用與生產中相同的ddl腳本,並且不希望以任何方式修改它們以進行「單元」測試。 我也試過HSQL,但發現H2更類似於oracle,但即使那樣它也不支持分區。 有沒有解決這個問題的方法?如何在內存數據庫中使用高效的java來模擬Oracle數據庫

我看過以下 Create an in-memory database structure from an Oracle instance 它談到使用H2,但我已經提到它的缺點。 尋找一些替代品。

+3

如果您想進行有意義的測試,則不能模擬Oracle數據庫(或任何DBMS)。設置您運行測試的測試實例。順便說一句:你應該提到,如果你實際上是在談論*分區*或*窗口函數*(使用'over(partition by ..') – 2013-02-12 21:44:23

+1

+1 for @ a_horse_with_no_name's comment。每個數據庫都有一個稍微不同的語法,你會以及建立一個測試實例oracle – 2013-02-12 22:04:05

+0

@MisrableVariable它取決於DAO的複雜性和你想測試的東西,如果DAO只是做簡單的CRUD操作,H2對於* unit *測試來說足夠了,但是我同意應該在Oracle上運行測試(即集成測試) – 2013-02-12 22:50:04

回答

0

您可以使用Oracle的數據字典來生成包含表格,它們的關係,索引,約束等的H2模式。我正在使用這樣的生成模式對內存H2數據庫進行測試。

例如讓所有的表和字段,您可以使用此查詢:

SELECT 
    ut.table_name, 
    utc.column_name, 
    utc.data_type, 
    utc.data_length, 
    utc.data_precision 
    FROM user_tables ut JOIN user_tab_columns utc 
    ON ut.table_name = utc.table_name; 

類似的查詢可以爲外鍵,其他約束,索引,序列和你需要的所有其他的事情可以做你的試驗。您還需要一個模板引擎,將查詢結果轉換爲H2 DDL腳本。

+1

但是這仍然不會「實現」 ent「支持窗口函數或Oracle特定的SQL擴展。 – 2013-02-12 22:31:58

+0

@a_horse_with_no_name nope,但至少可以解決特定於Oracle的DDL的問題。 – 2013-02-12 22:37:00

1

如果您想要有意義的測試,則需要針對您將在生產環境中運行的相同數據庫版本的實例運行它們。