【问题标题】:Resetting the DB after each test run每次测试运行后重置数据库
【发布时间】:2013-11-08 10:24:09
【问题描述】:

我有以下问题:

我有一个预先填充了大量测试数据的数据库。每次测试运行后,我想丢弃测试过程所做的更改。我已经尝试使用嵌入式 H2 DB 来做到这一点。我会用原始文件覆盖数据库文件,问题就会得到解决。但是出现了另一个问题:H2 不支持多线程而不作为服务器运行。

之后我查看了 HSQLDB。如果我理解正确,如果它用作普通文件数据库(不是内存中),它仍会将数据库的内容加载到内存中,并在一段时间后将更改的内容保存到磁盘。

是否有可能将文件 DB 读入内存,在那里使用它并在最后丢弃任何更改?这将是完美的。使用回滚的解决方案也很棒。

谢谢, 丹尼尔

【问题讨论】:

  • 为什么缺少多线程支持是个问题?
  • 因为应用程序严重依赖多线程,没有它就无法工作。有时超过 20 个线程同时访问数据库。如果它在测试中运行缓慢,它仍然可以,但它应该可以工作。
  • 好的,但是无论您选择哪种数据库解决方案,所有线程都必须等待数据库在测试运行结束时“恢复”,对吧?
  • 没问题,CI 会退出应用程序,回滚并再次启动应用程序以进行进一步测试。
  • 是的,所以重置数据库并不是真正的问题,一般来说只是针对您的应用程序。我对此感到困惑。

标签: testing persistence automated-tests hsqldb h2


【解决方案1】:

对于 H2 数据库:

【讨论】:

  • 谢谢 Thomas,我明天试试。
【解决方案2】:

HSQLDB 有一个用于此用法的选项。

创建测试数据库后,执行 SHUTDOWN。您将拥有一个 .properties 和 .script 文件。在 .properties 文件中添加这一行:

files_readonly=true

然后使用此数据库进行测试。应用退出时无需回滚或任何特殊操作。

或者,将其附加到您的测试应用程序的连接 URL ;files_readonly=true

请参阅指南的这一章:

http://www.hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_db_file_mem

对于多线程应用测试,数据库事务模型通常是MVCC,你在原始数据库中设置。

【讨论】:

  • 感谢您的回答。我没有尝试过,因为我们更喜欢 H2,而且 Thomas 提供的答案非常有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多