2010-07-20 36 views
4

有沒有在junit中測試rowlocked異常的方法?如何在junit中測試行鎖定異常

+1

提供的信息不足以回答這個問題。 行爲可能依賴於JDBC驅動程序,並不是每個RDBMS都適用於單元測試等。 – 01es 2010-07-20 19:31:50

+0

此問題對於究竟應該測試什麼有點模糊。測試數據庫引發異常?測試應用程序是否正確響應異常? – 2010-08-31 15:07:17

回答

6

如果你的數據庫依賴關係爲mock,那麼你可以讓你的模擬對象拋出鎖定的行異常。

由於您已經刪除了對數據庫的直接依賴關係,因此測試應該運行得更快,並且由於數據庫問題(如數據庫不可用或類似的情況)而不太容易出現「閃爍測試」 。

此外,你只是測試你的代碼,而與數據庫無關 - 它是實現不可知的。如果您選擇在將來更改數據庫供應商,這個(a)應該與您的代碼無關並且(b)您的測試不關心它正在使用的數據庫。

一些示例嘲諷的框架,讓你開始:

5

事情是這樣的:

@Test(expected=SQLException.class) 
public void testReadLockedRowException() { 
    ... 
} 
3

格奧爾基是正確的,但你需要更多的實現:兩個客戶端來訪問數據庫。一個讀取並掛在行上,另一個讀取並訪問它並生成異常。

+1

我敢打賭,你不需要兩個線程。兩筆交易應該足夠了。 (每個連接事務的場景有兩個連接) – 2010-07-20 18:29:39

1

使用模仿對象,從模擬DB扔行鎖定異常。

與真正DB:

  1. 打開兩個DB會話
  2. 在會話1個鎖定有趣行
  3. 在衝突模式會話2次訪問鎖定行沒有在會議1
  4. 前解鎖它