如何在junit中测试行锁定异常

时间:2010-07-20 18:16:26

标签: java junit

在junit中有没有办法测试rowlocked异常?

4 个答案:

答案 0 :(得分:6)

如果你mock数据库依赖,那么你可以让你的模拟对象抛出锁定的行异常。

由于您已经删除了对数据库的直接依赖性,测试应该运行得更快,并且由于数据库问题(例如数据库不可用或类似问题),您不太容易发生“闪烁测试”。

另外,通过这种方式,您只测试代码,而不是与数据库无关 - 它与实现无关。如果您以后选择更改数据库供应商,那么(a)对您的代码无关紧要,(b)您的测试无关紧要知道它是什么数据库使用

一些示例框架可以帮助您入门:

答案 1 :(得分:5)

这样的事情:

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

答案 2 :(得分:3)

Georgy是正确的,但在实现中你需要更多:两个客户端来访问数据库。一个用于读取并挂起到该行,另一个用于尝试访问它并生成异常。

答案 3 :(得分:1)

使用模拟对象,从模拟数据库中抛出行锁定异常。

使用真正的数据库:

  1. 打开两个数据库会话
  2. 在会话1锁定感兴趣的行
  3. 在会话2中,在冲突模式下访问锁定行而不在会话1中解锁。