Go - 集成测试使用测试数据库连接

Go - 集成测试使用测试数据库连接

问题描述:

Go程序使用连接字符串连接到数据库。目前该连接字符串存储在一个环境变量中。Go - 集成测试使用测试数据库连接

我的挑战是编写一个自动化测试,对测试数据库执行该程序。

我以为我会在测试的init()函数中设置连接字符串环境变量,但在测试init()之前调用主程序的init()函数,所以这不起作用。

解决方法似乎是默认连接到测试数据库的字符串。如果没有定义环境变量,则使用测试;如果它被定义(生产),那就用它来代替。

是否有替代方案?有更好的方法吗?

+0

你的程序使用的db连接是全局的吗?如果是的话,就让你的测试创建一个测试连接并将其设置为全局变量的值。 – mkopriva

+0

'var db = DB.getConnectionUsingEnvironmentVariable()' –

+0

这是在主程序中。这目前恐慌。我可以更改它,以便在环境变量缺失时不尝试创建连接,并且一旦设置了环境变量,就会从测试中调用相同的代码。这是你想到的吗? –

我目前的解决方案是使连接成为未初始化的全局。该函数检查连接是否为零 - 如果是,它将初始化它。该测试有一个setup()函数,用于设置与集成测试数据库的连接 - 另一种方法是让测试只设置环境变量。

+0

如果你使用mysql我建议https://github.com/DATA-DOG/go-sqlmock如果你不想自己模拟结构。 – reticentroot