我尝试了几种方法(如下所示),但我不喜欢它们中的任何一种。所以我决定向社区询问是否有更好的方法。
方法1
将数据库凭据作为参数传递:
go test -args -db_user=test -db_pass=secret
然后在测试中使用它:
package my_test
var dbUser = flag.String("db_user", "", "test database user")
var dbPass = flag.String("db_pass", "", "test database password")
func TestSomething(t *testing.T) {
db := open(*dbUser, *dbPass)
}
方法2
在运行测试之前设置环境变量:
$ export TEST_DB_USER=user
$ export TEST_DB_PASS=secret
$ go test
或
$ TEST_DB_USER=user TEST_DB_PASS=secret go test -v
然后在测试中使用它:
package my_test
var dbUser = flag.String("db_user", "", "test database user")
var dbPass = flag.String("db_pass", "", "test database password")
func TestSomething(t *testing.T) {
db := open(os.Getenv("TEST_DB_USER"), os.Getenv("TEST_DB_PASS"))
}
方法3
在运行测试之前,使用.env.test
文件和github.com/joho/godotenv
包加载数据库连接凭据。
答案 0 :(得分:0)
由于以下原因,环境变量往往是最佳选择:
但总的来说,这个问题太广泛了。最终的答案取决于每天需要运行测试的项目人员。它还大量依赖于您的测试基础架构。
最后:如果这是单元测试,你不应该需要数据库凭证,应该嘲笑外部服务。您也不希望贡献者需要数据库凭据来运行单元测试。
如果这是用于集成测试,那么您的测试基础架构将是最重要的因素。