Sar*_*tts 5 unit-testing mocking request go amazon-web-services
我正在为使用 AWS SDK for Go 从 AWS Secrets Manager 获取密钥的函数编写单元测试:
main.go
//Helper function to get secret from AWS Secret Manager
func getAWSSecrets(svc secretsmanageriface.SecretsManagerAPI) (secretMap map[string]string, err error) {
//Get secret config values
req, resp := svc.GetSecretValueRequest(&secretsmanager.GetSecretValueInput{
SecretId: aws.String("my/secret/string"),
})
err = req.Send()
if err != nil {
return nil, err
}
...
}
Run Code Online (Sandbox Code Playgroud)
为了对此进行测试,我需要创建一个模拟 AWS Secret Manager 客户端。我已经建立了如何工作的基本框架:
main_test.go
type MockSecretsManagerClient struct {
secretsmanageriface.SecretsManagerAPI
}
func (m *MockSecretsManagerClient) GetSecretValueRequest(input *secretsmanager.GetSecretValueInput) (req *request.Request, resp *secretsmanager.GetSecretValueOutput){
// Confused on how to mock out the returned `req`
}
// tests getAWSSecrets
func (suite *ServerTestSuite) TestGetAWSSecrets() {
//Setup test
mockSvc := &MockSecretsManagerClient{}
req, resp := getAWSSecrets(mockSvc)
}
Run Code Online (Sandbox Code Playgroud)
我在尝试模拟从GetSecretValueRequest. 此外,一旦我模拟了这个请求,我不确定如何处理 mocking req.Send()。有没有一种简单的方法可以做到这一点?或者有没有人这样做的好例子?
首先,在“AWS SDK for Go API Reference”中找到该服务 。
然后查找API调用。您的电话在这里 https://docs.aws.amazon.com/sdk-for-go/api/service/secretsmanager/#SecretsManager.GetSecretValueRequest
API调用的原型是
func (c *SecretsManager) GetSecretValueRequest(input *GetSecretValueInput) (req *request.Request, output *GetSecretValueOutput)
Run Code Online (Sandbox Code Playgroud)
所以它返回一个 request.Request 和一个 GetSecretValueOutput
这两个输出项是结构体,它们在文档中链接。模拟应该以相同的方式返回这两个项目,即
func (m *MockSecretsManagerClient) GetSecretValueRequest(input *secretsmanager.GetSecretValueInput) (req *request.Request, resp *secretsmanager.GetSecretValueOutput) {
req = new(request.Request)
r := new(http.Response)
r.Status = "200 OK"
r.Status = 200
req.HTTPRequest = r
resp.SecretString = new(String("this is the dummy value"))
return
}
Run Code Online (Sandbox Code Playgroud)
如果您需要模拟值像来自实时 API 服务的“真实”数据一样模拟,那么编写一个快速程序来执行调用并Printf使用格式返回值"%#v"。这应该可以满足您的大部分需求
| 归档时间: |
|
| 查看次数: |
3987 次 |
| 最近记录: |