我正在开发一个C ++ Web应用程序,我在Ubuntu 16.04上使用PostgreSQL和libpqxx
。我遇到的问题是我需要一个可移植的(通过Linux系统)方式来运行我的单元测试。
我现在拥有的是一个控制数据库调用的类。我想在我的单元测试中测试这个类的行为。为此,每次我进行单元测试时,我都想:
现在,使用Google测试可以完成这些步骤。我可以创建一个可重复执行它们的夹具。但是...
如何在一次通话中创建一个具有密码的用户(不提示输入密码),以便我可以随时创建该用户并运行我的测试?
manual似乎没有提供在参数中提供密码的方法。我希望能做到这样的事情:
system("createuser " + username + " -password abcdefg");
其中system()
运行终端命令。然后我可以使用该用户名和密码连接到数据库服务器以进行单元测试。
另一次失败的尝试是通过终端传递sql query that would create the user:
system("psql -c \"CREATE ROLE joe PASSWORD 'aabbccdd';\"")
当我这样做时,我收到错误:
psql: FATAL: database "user" does not exist
其中user
是我的unix用户名。
请记住,我无法使用libpqxx
连接到服务器,因为我还没有凭据(作为临时用户)。对?如果我错了,请纠正我。
有没有办法做我在这里计划的事情,并且在没有用户干预的情况下使单元测试可以运行?
答案 0 :(得分:0)
system("psql -c \"CREATE ROLE joe PASSWORD 'aabbccdd';\"")
调用的问题在于它没有指定要连接的数据库,然后默认尝试与登录用户同名的数据库。尝试添加{{1并查看它是否有效。
请注意,这只会创建用户,不会创建任何数据库或授予任何权限。