为了账号安全,请及时绑定邮箱和手机立即绑定

你如何模拟 *ec2.DescribeVolumesOutput 的值

你如何模拟 *ec2.DescribeVolumesOutput 的值

Go
元芳怎么了 2023-06-19 17:13:11
我目前正在尝试适应 TDD,并且在我正在进行的当前项目中,我正在尝试利用 AWS 的 Go SDK。这一切都很好,花花公子,我以前用过它,但我目前正在尝试模拟发送的值*ec2.DescribeVolumesOutput。深入研究代码,我将其视为返回的内容*ec2.DescribeVolumesOutput:type DescribeVolumesOutput struct {    _ struct{} `type:"structure"`    // The NextToken value to include in a future DescribeVolumes request. When    // the results of a DescribeVolumes request exceed MaxResults, this value can    // be used to retrieve the next page of results. This value is null when there    // are no more results to return.    NextToken *string `locationName:"nextToken" type:"string"`    // Information about the volumes.    Volumes []*Volume `locationName:"volumeSet" locationNameList:"item" type:"list"`}好的..这很酷,但我想要模拟的输出必须位于Volumes []*VolumelocationName:"volumeSet" locationNameList:"item" type:"list"` 中所以让我们更深入一点,看看那是什么......好的!这看起来像是我想模拟其值的一些数据!但在过去的几天里,我并没有真正嘲笑这些价值观。它们是否如此嵌套以至于这种类型的嘲笑不值得付出努力?即使尝试使用 似乎也github.com/aws/aws-sdk-go/service/ec2/ec2iface无法帮助我思考如何正确打包一些模拟值返回以进行测试。我来参加 TDD 是不是全错了?我错过了一些非常明显的东西吗?我真的没有示例代码可以展示,因为我现在不再理解我想要做什么。有没有人可能有他们如何嘲笑这个的例子?
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

无法模拟类型,您只能模拟接口的实现。在您的情况下,我假设您正在尝试调用DescribeVolumes并在响应中获取由您构造的值。
为此,您需要创建一个模拟

type MockEC2API struct {

    ec2iface.EC2API // embedding of the interface is needed to skip implementation of all methods

    DescribeVolumesMethod func(*ec2.DescribeVolumesInput) (*ec2.DescribeVolumesOutput, error)

}


func (m *MockEC2API) DescribeVolumes(in *ec2.DescribeVolumesInput) (*ec2.DescribeVolumesOutput, error) {

    if m.DescribeVolumesMethod != nil {

        return m.DescribeVolumesMethod(in)

    }

    return nil, nil // return any value you think is good for you

}

在测试中创建实例MockEC2API而不是真实实例ec2.EC2并为其提供将被调用的函数并返回您准备好的ec2.DescribeVolumesOutput结果


...

ec2 := &MockEC2API{

    DescribeVolumesMethod: func(*ec2.DescribeVolumesInput) (*ec2.DescribeVolumesOutput, error) {

        return &ec2.DescribeVolumesOutput{...your initialization...}, nil

    }

}

...

output, err := ec2.DescribeVolumes(in) // this output will be your prepared initialization



查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信