登录
首页 >  Golang >  Go问答

设置秘密凭据以在自动测试运行程序时使用 Golang Test Explorer

来源:stackoverflow

时间:2024-02-16 19:15:26 239浏览 收藏

本篇文章给大家分享《设置秘密凭据以在自动测试运行程序时使用 Golang Test Explorer》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在对一些需要 API 凭据才能上传和列出 DigitalOcean Spaces 存储桶中的文件的功能进行单元测试。这些值已使用 CLI 标志设置。我正在使用 Go Test Explorer 来运行测试,我注意到这两个测试由于凭据为空而失败。有谁知道是否有一种方法可以在测试中设置环境变量,而无需在执行“go test -run”之前在命令行中显式设置它们?


正确答案


go 1.17 刚刚添加了通过 T.Setenv 在测试期间更改环境变量的功能。

来自docs

t.setenv 调用 os.setenv(key, value) 并使用 cleanup 来恢复 测试后环境变量恢复为原始值。

这不能用于并行测试。

用法示例:

func getcreds() (u, p string) {
    u, p = os.getenv("user"), os.getenv("pass")
    return
}

func testenv(t *testing.t) {
    t.setenv("user", "xxx")
    t.setenv("pass", "yyy")

    u, p := getcreds()
    t.logf("creds: %q / %q", u, p) // will get local testing env settings
}

func testnoenv(t *testing.t) {

    u, p := getcreds()
    t.logf("creds: %q / %q", u, p) // will get nothing
}

https://play.golang.org/p/QBl3hV6WjWA

编辑:从评论看来,您的(或 digialocean 的)测试函数使用 flagset 这是命令行选项(如果您分享了一些测试,可能会有所帮助)问题中的代码)。无论如何,如果是这种情况,调用 go test 并传递参数的正确方法如下所示:

go test -args -spaces-key="key" -spaces-secret="s3cr3t"

如果你想传递 env var,那么你之前的做法是正确的:

SCOREKEEPER_SPACES_KEY="key" SCOREKEEPER_SPACES_SECRET="s3cr3t" go test

好了,本文到此结束,带大家了解了《设置秘密凭据以在自动测试运行程序时使用 Golang Test Explorer》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>