PostgreSQL:如何为我的单元测试创建临时用户和数据库



我正在开发一个C++的Web应用程序,我在Ubuntu 16.04上使用PostgreSQL和libpqxx。我遇到的问题是我需要一种可移植的(通过 Linux 系统)的方式来运行我的单元测试。

我现在有一个控制数据库调用的类。我想测试这个类在我的单元测试下的行为方式。为此,每次运行单元测试时,我都想:

  1. 创建临时用户
  2. 创建虚拟数据库
  3. 对其运行我的测试
  4. 删除数据库
  5. 删除用户

现在,通过Google测试执行这些步骤就可以了。我可以创建一个可以重复地完成所有这些操作的夹具。但。。。

如何在一次调用中创建具有密码的用户(不提示输入密码),以便我可以随时随地创建该用户并运行测试?

该手册似乎没有提供在参数中提供密码的方法。我希望做这样的事情:

system("createuser " + username + " -password abcdefg");

其中system()运行终端命令。然后,我可以使用该用户名和密码连接到数据库服务器以进行单元测试。

对我来说,另一个失败的尝试是传递一个 sql 查询,该查询将通过终端创建用户:

system("psql -c "CREATE ROLE joe PASSWORD 'aabbccdd';"")

当我这样做时,我收到错误:

psql: FATAL:  database "user" does not exist

其中user是我的 Unix 用户名。

请记住,我无法使用libpqxx连接到服务器,因为我还没有凭据(作为临时用户)。右?如果我错了,请纠正我。

有没有办法做我在这里的计划并使单元测试无需用户干预即可运行?

system("psql -c "CREATE ROLE joe PASSWORD 'aabbccdd';"")调用的问题在于它没有指定要连接的数据库,然后默认尝试与用户登录同名的数据库。尝试添加-d postgres,看看它是否有效。

请注意,这只会创建用户,不会创建任何数据库或授予任何权限。

最新更新