2013-04-26 81 views
0

我正在編寫使用JPA執行數據庫操作的java代碼。即getTransaction,getResultList,setFirstResult,setMaxResults,開始,提交,刷新,清除...爲異常處理生成數據庫錯誤的方法

我的問題是,即使我可以包裝我的代碼在try catch塊中,我仍然需要方法來生成異常來測試如果我的代碼工作。

如何生成數據庫錯誤來測試異常處理?一些SQL命令在程序運行的同時在java外部的數據庫上運行?我的目標數據庫是SQL Server 2008 R2。

關於像鎖定和「StaleObjectStateException:行被更新或刪除的另一個...」的常見錯誤的例子,將不勝感激。

謝謝!

回答

1

StaleObjectStateSession,你可以編寫

e1 = session1.load(key); 
e2 = session2.load(key); 
e2.modifyAnything(); 
e2.update(); 
e2.commit(); 
e1.modifyAnything(); 
e1.update(); 

JUnit測試情況,那麼你得到你的例外。順便說一句,StaleObjectStateSession是一個Hibernate異常,而不是數據庫異常。

爲了測試真實的數據庫異常,您可以違反數據庫約束,例如,編寫一個JUnit案例,其中您插入的行的主鍵已存在,或者在聲明爲NOT NULL的列中具有空值在數據庫上。

如果你想一次測試,你希望避免的努力寫一個JUnit測試案例,那麼你可以與Eclipse調試和SQL操作做到這一點:

您設定的負載之間的斷點在代碼中提交記錄。當達到斷點後,在SQL中,您可以用DELETE FROM table WHERE primary_key =...手動刪除此記錄,並在繼續執行之前提交此修改。 (或者你可以在UPDATE這一行,但是不要忘記更新版本列。)然後在Eclipse中繼續執行程序。

另一個想法是臨時使空列與ALTER TABLE table MODIFY(column ... NOT NULL)不爲空。在測試之後,您必須撤消此修改。當然,這種測試只能在專用測試數據庫上進行,而不能在生產系統上進行。

0

我會嘲笑基於接口的DAO來創建任何我想要的異常。

您正在編寫基於接口的DAO,不是嗎?

我不確定嘗試單元測試是否適合可能出現的每種特殊情況都是實用的。