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

发布于 2024-09-11 07:45:35 字数 34 浏览 5 评论 0原文

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

Is there a way in junit to test rowlocked exception?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

心欲静而疯不止 2024-09-18 07:45:35

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

由于您将消除对数据库的直接依赖,因此测试应该运行得更快,并且您将不太容易因数据库问题(例如数据库不可用或类似问题)而出现“闪烁测试”。

另外,这样,您只需测试代码,与数据库无关 - 它与实现无关。如果您选择将来更改数据库供应商,则此(a)对您的代码来说应该无关紧要,并且(b)您的测试并不关心它是什么数据库使用。

一些帮助您入门的模拟框架示例:

If you mock your database dependencies, then you can have your mock object throw the locked row exception.

As you'll have removed your direct dependency on the database, the test should run faster, and you'd be less prone to "flickering tests" due to database problems such as the database not being a available or something similar.

Also, this way, you are only testing your code, and nothing to do with the database - it is implementation agnostic. Should you choose to change database vendor in the future, this (a) shouldn't matter to your code and (b) your test doesn't care what database it is using.

Some example mocking frameworks to get you started:

昔日梦未散 2024-09-18 07:45:35

像这样的事情:

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

Something like this:

@Test(expected=SQLException.class)
public void testReadLockedRowException() {
    ...
}
三人与歌 2024-09-18 07:45:35

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

Georgy is correct, but you'll need more in the implementation: two clients to access the database. One to read and hang onto the row, another to try and access it and generate the exception.

烈酒灼喉 2024-09-18 07:45:35

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

使用真实数据库:

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

With mock objects, throw row locked exception from your mock DB.

With a real DB:

  1. Open TWO DB sessions
  2. In session 1 lock interesting row
  3. In session 2 access locked row in a conflicting mode without unlocking it before in session 1.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文