PostgreSQL 可以通过某种一次性覆盖来支持集成测试吗?

Tho*_*och 5 postgresql testing snapshot unit-test integration

编写包含数据库的集成测试是一个常见问题。如果测试更改了数据库,那么它可能会影响其他测试或下一次运行。

我知道我可以将我的测试包装在一个事务中并在测试运行后回滚该事务。但是如果 PostgreSQL 能够提供某种全局快照或一次性覆盖,那就太好了。在理想情况下,这样的功能将涵盖数据库的所有状态,包括模式和存储过程。

a_h*_*ame 13

您可以解决此问题的一种方法是创建一个“基本”测试数据库(包括所有测试数据)一次。然后在每个测试套件之前,使用“基础”数据库作为模板创建一个数据库。

create database test_db 
   with template = base_test_db;
Run Code Online (Sandbox Code Playgroud)

使用它,模板中的所有内容都将被复制到新数据库(包括数据、存储过程、扩展)。

在每个测试套件之后,您只需删除test_db并使用上述语句重新创建它。

如果您在每次测试之前都这样做,这种方法可能不够快,但这在很大程度上取决于您的测试数据库有多大以及构建环境的硬盘有多快。