我想为我编写的每个单元测试运行一个仅在内存中运行的小型PostgreSQL数据库。例如:
@Before
void setUp() {
String port = runPostgresOnRandomPort();
connectTo("postgres://localhost:"+port+"/in_memory_db");
// ...
}
理想情况下,我会将单个postgres可执行文件签入到版本控制中,单元测试将使用该文件。
类似于HSQL
,但适用于postgres。我该怎么做呢?
我能得到这样的Postgres版本吗?我怎样才能指示它不要使用磁盘?
发布于 2017-09-21 19:18:09
现在可以通过OpenTable:https://github.com/opentable/otj-pg-embedded中的嵌入式PostgreSQL组件在JUnit测试中运行内存中的PostgreSQL实例。
通过将依赖项添加到otj-pg嵌入库(https://mvnrepository.com/artifact/com.opentable.components/otj-pg-embedded)中,您可以在@Before和@Afer挂钩中启动和停止您自己的PostgreSQL实例:
EmbeddedPostgres pg = EmbeddedPostgres.start();
他们甚至提供了一个JUnit规则,让JUnit自动为您启动和停止PostgreSQL数据库服务器:
@Rule
public SingleInstancePostgresRule pg = EmbeddedPostgresRules.singleInstance();
发布于 2020-08-03 23:21:08
如果你正在使用NodeJS,你可以使用pg-mem (免责声明:我是作者)来模拟postgres db的最常见的特性。
你将有一个完整的内存中,隔离的,平台无关的数据库来复制PG的行为(甚至是runs in browsers)。
我写了一篇文章来展示如何将它用于你的单元测试here。
发布于 2013-06-11 04:45:19
您还可以使用PostgreSQL配置设置(如问题和接受的答案here中详细介绍的设置)来获得性能,而不必求助于内存中的数据库。
https://stackoverflow.com/questions/7872693
复制相似问题