2010-02-09 53 views
2

我正在使用DbUnit和Unitils,它在大多數情況下都很有效。DbUnit:增量ID生成問題

今天我發現了一個奇怪的問題。

的情況是:

  • 我使用Hibernate,並有ID以 「增量」 發電機:
 
<id name="Id"> 
    <generator class="increment"/> 
</id> 
  • 我準備測試數據集,其中最大的ID是5
  • 我使用乾淨插入加載策略。
  • 我有兩種測試方法test1test2,每個在此表中添加一行。
  • test1之後新增行的方法id = 6。
  • test2之後新創建的行的id爲7。

這一切都很好,我明白爲什麼這樣。但從維護角度來看,這是一個問題。如果我在兩者之間添加第三種測試方法,則即使沒有更改,方法test2也會突然失敗,只是因爲行會得到不同的ID。

是否有無論如何我可以強制DbUnit或Hibernate在每個測試方法之前計算下一個id值?

回答

3

第一件事情,你應該提供完整的數據集,是與id爲好。如果不是,請不要在ids上測試或根據您的測試。爲什麼不測試?因爲它已經很好的測試和可靠的事情。永遠記住,永遠不要測試第三方庫,其中大部分庫已經過測試。但似乎不可能不依賴於id。我同意,你應該寫一些模擬類來爲你解決這個問題,或者你可以提供一些setter方法來覆蓋你自己生成的值。

第二個選項總是用空表開始測試用例。在每個測試用例之前,您都可以編寫一個夾具來爲您清理表格。

+0

也正確地說 – Bozho 2010-02-09 14:55:45

+0

清理桌子通常是不夠的;您可能還必須重置表ID序列。 – pimlottc 2015-04-21 23:32:50

3

解決的辦法是不要依賴於生成的ID:

  • 他們是你測試的控制之外。
  • ,如果你讓他們通過測試控制,你不再是測試的類被測
+0

正確地說。 +1 – 2010-02-09 10:14:42

+0

我該怎麼做?有沒有辦法忽略鍵列? – 2010-02-09 11:00:42

+0

我不知道,我沒有關於你的測試類和測試類的信息 – Bozho 2010-02-09 11:35:30