gpt4 book ai didi

go - 在单元测试中模拟从main()调用的函数返回值

转载 作者:行者123 更新时间:2023-12-01 22:33:31 29 4
gpt4 key购买 nike

main.go中,我有一些代码可以对AWS Secrets Manager进行网络调用。

func main() {
secretName := os.Getenv("DYNAMO_SECRET")
credentials, err := getSecret(secretName)
if err != nil {
logger.Errorf("Failed to retrieve secret from AWS Secrets manager %+v\n", err)
panic(err)
}
router, err := setupRouter(credentials)
getSecret(secretName)函数在后台对AWS Secrets管理器进行网络调用。在对 main的单元测试中,我有以下代码。
func TestMainProgram(t *testing.T) {
defer mockStartServer(nil)()
defer mockSetupRouter(mux.NewRouter(), nil)()
main()
t.Log("Everything is perfect.")
}
运行单元测试时,我想模拟对AWS Secrets Manager的网络调用。是否可以模拟 getSecret(secretName)的返回值?在Java上下文中,我正在尝试使用 Mockitowhen(functionIsCalled).thenReturn(mockValue)语法执行类似的操作。

最佳答案

您可以使用函数变量将其设置为其他值进行测试:

func defaultGetSecret(secretName string) (Credentials, error) {...}

var getSecret=defaultGetSecret

func main() {
...
credentials, err:=getSecret(...)
}
在测试中,您可以将 getSecret更改为指向其他内容:
func TestMain(t *testing.T) {
getSecret=func(secretName string) (Credentials,error) {
return mockCredentials,nil
}
main()
}

关于go - 在单元测试中模拟从main()调用的函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63420222/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com