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

时间:2020-08-14 21:29:08

标签: go mocking aws-secrets-manager

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 Manager进行了网络调用。在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)语法做类似的事情。

1 个答案:

答案 0 :(得分:1)

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

information_schema

在测试中,您可以更改func defaultGetSecret(secretName string) (Credentials, error) {...} var getSecret=defaultGetSecret func main() { ... credentials, err:=getSecret(...) } 指向其他内容:

getSecret