2016-09-26 60 views
1

我有我的應用程序中下面的代碼:如何故意拋出一個錯誤來測試數據庫回滾?

try { 
    //start transaction 
    repository.startTransaction(); 

    //carry out deletion logic 
    repository.deletedata() 

    //commit all 3 transactions 
    repository.commitTransaction(); 

} catch (Exception e) {  
    repository.rollback(); 
} 

我怎麼能故意拋出這個代碼內的error測試數據是否正確是回滾

+1

'拋出新異常(「test exception」);' –

+0

使用'throw new Exception(...)'語句? – RealSkeptic

+0

當我這樣做,下面在我的repository.commitTransaction();方法,我得到「無法訪問的語句」編譯錯誤 – java123999

回答

1

您在這裏測試錯誤。

你應該做兩件事情:你寫一個測試,確保你的回滾方法做它承諾做。你測試一邊。

然後你有另一單元測試,簡單地確保了只要有你的try塊中的異常預期調用回滾發生。

如果你真的想要做一個功能測試,做終端2終端的測試,包括回退,那麼你必須添加一些注射機制,是這樣的:

interface ErrorInject { 
    void throwException(); 
} 

,並在您嘗試塊,你會有這樣的:

try { 
    repository.startTransaction(); 
    inject1.throwException(); 
    repository.deletedata() 
    inject2.throwException(); 
    repository.commitTransaction(); 
} 

和默認情況下,這兩個「注入」的對象什麼都不做;但是對於你的測試用例,你要確保這兩個對象中的一個真的引發異常。

但是當然 - 你不想在你的產品代碼中這樣做。所以 - 你最好退後一步,想想我的第一個建議是否適合你。

一種替代方案可能是面向方面編程;這可能允許您使用某些註釋來指示您的框架在某個方法調用時失敗。但正如所說:你不應該用「測試方面」污染你的生產代碼。

相關問題