如何测试返回字符串或数字类型的结构属性而不是结构本身的函数?我正在尝试用块测试块。Lambda CodeTest Code在下面的块中,我返回*resp。UserPoolClient.ClientSecret 它取消引用 到 ,而不是 .Lambda Codestring*string当我运行测试时,我相信我得到了一个紧急错误,就像在调试器中一样。*resp.UserPoolClient.ClientSecretnil我返回的取消引用属性是错误的方法吗?想知道我是否最好只返回整个 resp 对象,而不是取消引用?我这样做是因为我根本不需要修改值,只需要副本可供参考。Lambda Codepackage main import ( "fmt" "log" "os" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-sdk-go/aws/session" cidp "github.com/aws/aws-sdk-go/service/cognitoidentityprovider" cidpif "github.com/aws/aws-sdk-go/service/cognitoidentityprovider/cognitoidentityprovideriface" util "github.com/sean/repo/internal/util") type application struct { config configuration} type configuration struct { ClientPoolID string UserPoolID string idp cidpif.CognitoIdentityProviderAPI} func (app application) getUserPoolClientSecret() (string, error) { input := &cidp.DescribeUserPoolClientInput{ UserPoolId: aws.String(app.config.UserPoolID), ClientId: aws.String(app.config.ClientPoolID), } resp, err := app.config.idp.DescribeUserPoolClient(input) if err != nil { if aerr, ok := err.(awserr.Error); ok { log.Printf("[ERROR] %v", aerr.Error()) } else { log.Printf("[ERROR] %v", err.Error()) } return "", err } log.Println("[INFO] Obtained user pool client secret successfully") return *resp.UserPoolClient.ClientSecret, nil}// omitted for brevity func main() { config := configuration{ ClientPoolID: os.Getenv("CLIENT_POOL_ID"), UserPoolID: os.Getenv("USER_POOL_ID"), idp: cidp.New(session.Must(session.NewSession())), } app := application{config: config} lambda.Start(app.handler) // handler() calls app.getUserPoolClientSecret}
1 回答
慕娘9325324
TA贡献1783条经验 获得超4个赞
我返回的取消引用属性是错误的方法吗?
就个人而言,我不认为这是错的。我也会这样做。但更有经验的Go开发人员也许能够在这里提供更细致入微和详细的答案。
关于恐慌,我认为问题在于您创建的模拟不会返回所有必需的信息。
您的模拟:
idpMock := mockDescribeUserPoolClient{
Response: &cidp.DescribeUserPoolClientOutput{},
Error: nil,
}
您只需创建 的“空”实例。但是,您要测试的代码确实访问了两个未定义的子代码:DescribeUserPoolClientOutput
UserPoolClient(结构引用)
ClientSecret(字符串引用)
您的验证码:
*resp.UserPoolClient.ClientSecret
所以你的模拟也需要模拟这些:
idpMock := mockDescribeUserPoolClient{
Response: &cidp.DescribeUserPoolClientOutput{
UserPoolClient: &cidp.UserPoolClientType{
ClientSecret: aws.String("example-secret")
}
},
Error: nil,
}
这应该可以解决您的恐慌。
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消