2012-09-07 57 views
0

我在尋找一個框架,它允許我使用XML來設置單元測試數據。從XML創建數據庫中的測試數據

我做了很多開發,其中一個Web前端與一個或多個後端數據庫服務器上的多個表連接。爲了進行單元測試,我將數據插入到內存中的HSQLDB表中,並針對此操作運行數據庫操作。它速度很快,並提供了一個相當好的單元測試環境。 Hibernate的工作原理也相當不錯。我只是告訴它,我正在使用HSQLDB方言進行單元測試和生產中的DB2方言,它處理它們之間的差異。

很多時候,我正在使用在SQL廣泛使用之前在生產中使用的遺留表。大量的decimal(7,2)字段。很多(我的意思是LOTS)複合鍵和索引。我有這種情況,這個表有一個由這兩個字段組成的複合PK,實際上這個字段是FK關閉到另一個表的複合PK,再加上其他一些特定於這個表的字段。我們有decimal(8,0)字段,它們實際上是YYYYMMDD值。後者實際上是複合PK的一部分。

我不明白這個環境。這些表中的一些已經在生產中使用了數十年。

HSQLDB在所有這些方面運行良好。它可以模擬所有這些東西。我甚至可以創建前面提到的decimal(8,0) -cum-date字段之一,在該字段中,我將當前日期添加/減去多個日期,並將其轉換爲decimal(8,0)值。

我這樣做是通過創建多個SQL文件。其中一個包含一個表的create table語句,另一個包含一串將數據插入該表的insert語句。 JUnit執行這些來設置上下文,然後根據上下文運行實際的單元測試。任何使用JUnit和Spring的人都可能熟悉這種設置。

問題是我最終不得不在一個文件中硬分配PK值,然後保持與其他文件中記錄的參照完整性。

手動。

保持此狀態令人頭疼。因爲我想添加另一個測試用例或修改現有的測試用例,我已經失去了在多個文件中維護引用的小時數。

我想要一個框架,它可以讀取/解析這些create table語句,或從創建的表格中提取模式數據,也可以採取一些額外的配置,告訴它表B中的這些字段實際上是FK關閉的複合PK在表A

然後,如果我想創造出具有類似的XML文件:

<table_A field1="value" field2="value" pkField1="value" pkField2="value"> 
    <table_B field1="value" field2="value" pkField3="value" /> 
    <table_B field1="value" field2="value" pkField3="otherValue" timeField="+5 minutes"/> 
</table_A> 

,並讓它創建表A中的記錄,必要注意的PK值,然後在表B中創建兩個記錄,其中具有適當的FK值,表B中的第二個記錄具有time場比前一場晚5分鐘。除非我想/不需要,否則我不必在一個表中或另一個表中明確地指定參考字段值。系統可以根據需要自動生成字段,並根據需要將它們轉發到FK。

我希望能夠嵌套任意深度的許多級別。在我的頭頂,我可以圖片:

<table_a ...> 
    <table_b ... /> 
    <table_b ... /> 
    <table_b ... /> 
    <table_c ... /> 
    <table_c ... /> 
    <table_d ...> 
    <table_e ...> 
     <table_f ...> 
     <table_g ... /> 
     <table_g ... /> 
     <table_h ...> 
      <table_i ... /> 
      <table_i ... /> 
     </table_h> 
     </table_f> 
    </table_e> 
    </table_d> 
</table_a> 

在我現有的項目之一。

我想能夠在一個文件中而不是9箇中指定整個數據集。很容易看到什麼數據連接到其他數據。所有這些都被插入適當的表格中,這些表格可能不在同一個DataSource中。

我們曾經在模擬對象上做了很多工作,在單元測試階段用這些對象代替了數據庫操作。當代碼進入動手測試階段並且必須與數據庫交互時,我們遇到了一些問題。人類,模擬物體是不夠的;必須將數據寫入數據庫,系統要確保PK和FK全部相互引用。

這個問題,簡而言之:有誰知道一個框架,使所有上述?包括做日期/時間數學的能力?並轉換爲其他格式?

回答

1

我不確定它會用複雜的測試數據完全消除您的痛苦,但我認爲DBUnit至少可以緩解一點。值得一看,然後嘗試。

+0

這看起來可能是一個很好的答案。仍然搞亂它,試圖找出它是否可以做相對的日期/時間和轉換。 – Meower68

0

我不知道一個與需求完全匹配的工具,但是,你看看Red Gate's SQL Data Generator?紅門做出非常好的SQL工具。

我覺得你的問題在單元測試模擬對象:

人機工程學,模擬對象是不夠的;必須將數據寫入 數據庫,並確保PK和FK都相互正確地引用 。

可以改進。如果業務對象根據對象關係進行了合適的驗證,那麼單元測試會更有用。

+0

如果我所需要做的只是從XML創建數據,並且永遠不會弄亂它,那麼這將會很順暢。如果我想修改數據,那麼在後面我會修改 - 控制生成的SQL(因爲這就是單元測試實際需要的)**和**原始源XML,並且其他人維護它也必須有這些工具。 – Meower68