使用内存数据库进行单元测试

时间:2012-08-01 17:30:55

标签: java unit-testing postgresql testing in-memory-database

我有PostgreSQL数据库。它用于单元测试。

  • 我想加快测试速度,所以我想使用某种内存数据库(例如H2)。
  • 我想转储数据库(从PostgreSQL)并将这样的转储导入到内存数据库中。

您对内存数据库选择有什么建议吗?我希望该数据库与PostgreSQL兼容。

3 个答案:

答案 0 :(得分:4)

我只是在tmpfs中创建一个数据库目录(在PostgreSQL中称为集群)(本质上是一个RAM磁盘 - /dev/shm在大多数Linux发行版中都是这样配置的)并且只是在那里以非标准运行postgres端口,例如:

initdb -D /dev/shm/pgtest
postmaster -D /dev/shm/pgtest -p 11111

答案 1 :(得分:3)

我建议使用弹簧组合HSQL。我被带到目前的职业去做这件事,即使这很令人头痛,也可以做到。基于快速研究,它似乎hsql is compatible with PostgreSQL。如果您有任何其他问题,请与我们联系。

答案 2 :(得分:0)

你需要放弃Pg吗?

如果您针对不同的数据库进行单元测试而不是在生产中运行,那么您的测试就不会那么好。

试试这个:Optimise PostgreSQL for fast testing

......看看你怎么走。

更新:您可能会认为将所有内容放在ramdisk上会使您的测试速度更快,但您可能会误会。通常更多有效地让未使用的数据溢出到磁盘,因此系统可以使用更多的RAM来完成手头的任务。使用unlogged表和正确的异步提交或(仅用于测试,将使用您的数据)fsync=off应该可以获得非常相似的速度。

如果确实需要真正的内存表,请在ramdisk或tmpfs上创建文件系统,并在其中创建一个新集群。您也可以使用UNLOGGED表,这样它们就不会通过预写日志。

请注意,虽然tmpfs是ramdisk,但它允许使用较少的页面进入交换空间。如果由于某种原因绝对必须将所有数据都固定在RAM中,则需要使用ramdisk驱动程序和create a file system on a ramdisk。我的建议:不要这样做。只需正确配置Pg即可进行快速测试。