2010-11-12 41 views
1

我試圖測試我的代碼,使用JBoss Seam和Hibernate編寫。我想要實現的是:如何在自動化單元或系統測試期間模擬Hibernate錯誤?

執行SeamT​​est自動化測試以在Seam組件上運行特定的方法。該組件執行數據庫更新(合併或保存)。我想讓這個更新失敗,讓我測試我的錯誤處理代碼,並確保我的代碼恢復正常。

我還沒有能夠確定一個簡單的方法來做到這一點。

任何建議,將不勝感激。

回答

0

由於Hibernate中的(模擬)故障或實體驗證失敗而導致更新失敗?我聲稱你很難碰到前一種情況。我從來沒有遇到過不是由我的代碼引起的Hibernate問題。對於這種情況,如果發生Hibernate異常,您必須確保您的事務處於回滾狀態。通常情況下,如果您在Seam中使用@Transactional註釋了您的操作方法,那麼您的交易應回滾到RuntimeException(每個HibernateExceptionRuntimeException)。

對於後一種情況(測試您的實體驗證),您可以創建一個​​向您的更新方法發送無效實體。

您可以檢查的另一種情況是,如果您使用要更新的實體或使用DB上不存在的實體調用您的方法,會發生什麼情況。

如果您發佈了更新方法的代碼,我會嘗試提供更多建議。

+0

我並沒有特別想到我試圖測試哪種類型的異常,所以你的消息爲我提供了一種前進的方式,謝謝。 – TrueDub 2010-11-15 09:03:52

0

聲明:我沒有使用過Seam。

假設一個單元測試是一個事務,在數據庫更新後不會拋出RuntimeException就足夠了?

0

我沒有使用過Seam,但我在Hibernate項目中使用了DbUnit。

的DbUnit用JUnit的作品,並且允許以下內容:

  • 負載數據到DB
  • 執行JUnit測試(其可以查詢DB)
  • 除去所述從DB
  • 數據

還有其他的變化,基於配置。

在這樣的背景下,您的測試可以加載一個記錄,並在一個唯一列中添加一個值。測試然後嘗試保存相同的值。現在,您在可重複的受控測試中出現錯誤情況,並且無需修改項目代碼。

+0

使用DBUnit肯定是在我的待辦事項列表中,所以我將保存此解決方案以供我實施時使用。感謝回覆! – TrueDub 2010-11-12 18:16:58