用于测试目的的Postgres轻量级数据库

时间:2015-11-16 14:08:01

标签: java postgresql testing

从java代码初始化一些轻量级PostgreSQL实例(可能在某些临时目录中)的最简单方法是什么。我需要一些临时数据库来运行测试;所以最好的方法是在运行测试之前/之后创建/删除该集群(数据库)。

是否有一些Java库?没有外部脚本,是否可以使用纯Java代码?

我的堆栈是Java,Maven,jetty,TestNG,PostgreSQL。

2 个答案:

答案 0 :(得分:2)

使用专为此目的设计的the PostgreSQL maven plugin

如果它无法在PATH找到它们,你需要告诉它PostgreSQL的二进制文件在哪里。

如果你想自己动手,你需要:

  • 通过initdb调用ProcessBuilder以创建临时数据目录。
  • pg_hba.conf进行必要的更改或生成新的
  • 通过postgres调用ProcessBuilder启动PostgreSQL

您的ProcessBuilder必须设置PATH环境变量,以便PostgreSQL可以找到其他二进制文件。

您不必生成自定义postgresql.conf,因为您可以在命令行上传递参数,例如

postgres -D some-datadir -c port=5599 -c listen_addresses='127.0.0.1'

等。但如果您愿意,您只需将一行添加到默认postgresql.conf,如

include 'myapp-test.conf'

然后生成/复制包含所需PostgreSQL配置设置的myapp-test.conf文件。如果由于命令行长度限制而有很多设置和/或复杂设置,这可能会更容易,并且它可以更具可读性/可调试性。

启动PostgreSQL进行测试时,请勿使用默认端口。始终覆盖端口。

答案 1 :(得分:0)

取决于您究竟需要什么。只有数据库才能启动并运行?还是在测试之间管理数据?

  1. testcontainers将帮助您启动和停止数据库。

  2. dbunit将帮助您准备测试数据。

    缺点:

    • 创建和维护架构和数据需要做很多工作。特别是当您的项目处于密集开发阶段时。
    • 它是另一个抽象层,所以如果突然想要使用这个工具不支持的某个数据库功能,可能很难对其进行测试
  3. testegration - 旨在为您提供完整,随时可用且可扩展的生命周期(披露:我是创建者)。

    缺点:

    • 仅适用于小型项目
    • 非常年轻的项目
  4. 您也可以自己填补空白(ProcessBuilder,执行自定义脚本)。一如既往的交易:时间与金钱