java - 使用内存中的 PostgreSQL

标签 java hibernate postgresql maven testing

<分区>

我是数据库的新手,但我打算在我的 Hibernate 应用程序中使用 PostgreSQL。如何安装 Postgres、与 hibernate 绑定(bind)并使用它是相当清楚的。但我无法弄清楚如何使用 Maven 运行内存中的 Postgres 数据库进行测试。是否可以? 如果没有 - 任何建议如何在这种情况下测试我的应用程序?

附注相应教程的链接是最可取的,我将非常感谢。 谢谢!

最佳答案

(我已经修改并扩展了这个答案 on the post this one is a dup of ;我在这里保留它,因为它是对这个问题的更直接的答案)。

But I can't figure out how to run in-memory Postgres database with maven for testing. Is it possible?

不,这是不可能的。 PostgreSQL 以 C 语言实现并编译为平台代码。您不能将其放入 jar 中并将其作为一次性内存数据库启动。

相反,有一个标准的测试配置并记录它。思考:

To run these tests you'll need PostgreSQL 9.2 or newer installed and running on localhost port 5432, with a user named 'myapptest' who owns a database named 'myapptest'. 'md5' authentication must be permitted with password 'abcdefg', or you can use 'trust' mode.

To set this up you might use:

  CREATE USER myapptest PASSWORD 'abcdefg';
  CREATE DATABASE myapptest OWNER myapptest TEMPLATE template0;

and add an entry in pg_hba.conf like:

  host    myapptest    myapptest    127.0.0.1/32    md5
  host    myapptest    myapptest    ::1/128         md5

使用 Maven 参数来控制命中数据库的测试是否运行,以便其余测试仍然可以运行。

如果您愿意,您也可以使用 Maven 参数来指定用于测试的数据库主机名/用户名/数据库名/密码。我个人不会打扰。

或者,如果您真的热衷于让您的测试工具找到initdbpostgres 二进制文件,运行initdb 创建数据库,修改pg_hba.conftrust,运行postgres在随机端口启动,创建用户,创建一个数据库,并运行测试。我个人认为这是一个应该避免的主要痛苦;只配置一个测试数据库要容易得多。

有些人改为使用 PostgreSQL 方言模式下的 H2 数据库来运行测试。我认为这几乎与使用 SQLite 进行测试和使用 PostgreSQL 进行开发的 Rails 人员一样糟糕。

关于java - 使用内存中的 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288667/

相关文章:

java - RabbitMQ Spring AMQP - 一段时间后的消息处理

java - Java 如何从 HashMap 中获取对象

java - 在Hibernate中对于composite-id,为什么类应该实现Serialized

java - 连接数量比它可能多

java - Spring getJdbcTemplate().update 插入动态对象

SQL 如何使用 Count 和 Group By WXY 和 Z

java - Android - 在FrameLayout中将RelativeLayout居中对齐

java - 如何获取 JList 中的选定项并使用转换

django - Postgres : Password authentication failed for user "user". 角色 "user"不存在

hibernate - 如何在Grails中使用注入(inject)的dataSource来执行操作?