如何准备在内存替换中使用PostgreSQL的集成测试?

我了解到在集成测试中使用实际数据库可以显着减慢它们的速度.因此,我必须使用内存数据库,这可能会显着提高我的集成测试的速度.

我正在使用Springboot进行应用程序开发.如何配置PostgreSQL用于测试目的?内存数据库中是否有与PostgreSQL语法高度兼容的数据库?

如果没有,我应该如何进行集成测试.

解决方法

我对真实postgres的一些db测试每次需要10ms.我在每个测试中做了多次提交.所以:

要覆盖postgres-native功能,您需要相同的db(如您所见,h2和其他内存中的db不是很兼容). postgres没有内存模式.
对于功能测试,真实数据库本身并不比任何内存数据库慢得多.差异通常在于启动时间(对于postgres 9.6它是~4s).但是,如果您的测试生命周期是智能的,并且您可以将db启动次数降低到1或0(通过让开发db始终准备好),那么问题就会停止显着.

所以获得真正的postgres并正确设置其生命周期.有一些工具可以帮助您解决一些问题:

> testcontainers将帮助您提供
真正的数据库
> dbunit – 将帮助您清理测试之间的数据

缺点:

>创建和维护架构和数据需要做很多工作.特别是当您的项目处于密集开发阶段时.
>它是另一个抽象层,所以如果突然想要使用这个工具不支持的某个数据库功能,可能很难测试它

> testegration – 旨在为您提供完整,随时可用和可扩展的生命周期(披露:我是创建者).

缺点:

>仅限小型项目
>非常年轻的项目

另一个步骤是在操作系统级别将db移动到内存.再次,第一次启动时间将类似,因为所有需要加载.一些起点herehere

缺点:

>团队中的每个开发人员都必须修改他的本地环境>操作系统之间不可移植(如果您的团队有异构环境)

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...