Я пишу модульный тест для функции, которая использует AWS SDK для Go, чтобы получить секрет от Менеджера секретов AWS:
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
}
...
}
Чтобы проверить это, мне нужно создать фиктивный клиент 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)
}
У меня проблемы с попыткой смоделировать возвращенный запросот GetSecretValueRequest
.Кроме того, как только я высмеиваю этот запрос, я не уверен, как справиться с насмешкой req.Send()
.Есть ли простой способ сделать это?Или есть хорошие примеры того, как кто-то это делает?