每次测试运行后重置DB

时间:2013-10-29 10:15:00

标签: testing persistence automated-tests hsqldb h2

我有以下问题:

我有一个数据库预先填充了大量的测试数据。在每次测试运行后,我想抛弃测试程序所做的更改。我已经尝试使用嵌入式H2 DB执行此操作。我只是用原始文件覆盖数据库文件,问题就解决了。但是出现了另一个问题:如果没有作为服务器运行,H2不支持多线程。

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

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

谢谢, 丹尼尔

2 个答案:

答案 0 :(得分:1)

对于H2数据库:

答案 1 :(得分:1)

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,您可以在原始数据库中设置。