我尝试使用this example,但是使用它来模拟SSM GetParameter调用。我要做的就是发送inputParameter的值,并验证输出是否为outputParameter的值。
当我运行go test时,它只是抛出我定义的错误,但不确定为什么。我做错了什么?
下面是我的函数:
package main
import (
"fmt"
"log"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ssm"
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
)
type AWS struct {
Config *aws.Config
Session *session.Session
SSM ssmiface.SSMAPI
}
func (self *AWS) GetSSMValue(SSMPath string) string {
req, err := self.SSM.GetParameter(&ssm.GetParameterInput{
Name: aws.String(SSMPath),
WithDecryption: aws.Bool(false),
})
if err != nil {
log.Fatalln("Unable to retrieve value: ", err)
}
SSMValue := *req.Parameter.Value
return SSMValue
}
func main() {
Aws := new(AWS)
Aws.Config = &aws.Config{Region: aws.String("us-west-2")}
Aws.Session, _ = session.NewSession(Aws.Config)
ssmsvc := ssm.New(Aws.Session)
Aws.SSM = ssmiface.SSMAPI(ssmsvc)
inputParam := "/path/to/my/parameter"
myValue := Aws.GetSSMValue(inputParam)
fmt.Println(myValue)
}我的测试是:
package main
import (
"errors"
"github.com/aws/aws-sdk-go/service/ssm"
"github.com/aws/aws-sdk-go/service/ssm/ssmiface"
"testing"
)
type mockSSM struct {
ssmiface.SSMAPI
response string
err error
}
func (sp *mockSSM) GetParameter(input *ssm.GetParameterInput) (*ssm.GetParameterOutput, error) {
output := new(ssm.GetParameterOutput)
return output, sp.err
}
func TestGetSSMValue(t *testing.T) {
inputParameter := "path/to/my/test"
outputParameter := "MyTestOutput"
retriever := new(AWS)
retriever.SSM = &mockSSM{
response: outputParameter,
err: errors.New("my custom error"),
}
if actualValue := retriever.GetSSMValue(inputParameter); actualValue != outputParameter {
t.Errorf("Expected %q but got %q", outputParameter, actualValue)
}
}发布于 2019-11-20 15:59:37
实际上一切都是正确的,您只需要添加一行代码来初始化output.Parameter:output.Parameter = &ssm.Parameter{Value: aws.String("MyTestOutput")}
你的func必须看起来像这样:
func (sp *mockSSM) GetParameter(input *ssm.GetParameterInput) (*ssm.GetParameterOutput, error) {
output := new(ssm.GetParameterOutput)
output.Parameter = &ssm.Parameter{Value: aws.String("MyTestOutput")}
return output, nil
}发布于 2019-11-20 07:25:09
我必须将模拟的输出插入到测试模块的GetParameter()函数中。这似乎起作用了:
func (sp *mockSSM) GetParameter(input *ssm.GetParameterInput) (*ssm.GetParameterOutput, error) {
// Defines actual value that is received in the response
output := &ssm.GetParameterOutput{
Parameter: &ssm.Parameter{
Type: aws.String("String"),
Value: aws.String("MyTestOutput"),
},
}
return output, nil
}https://stackoverflow.com/questions/58940962
复制相似问题