你如何模拟 *ec2.DescribeVolumesOutput 的值

我目前正在尝试适应 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 是不是全错了?我错过了一些非常明显的东西吗?我真的没有示例代码可以展示,因为我现在不再理解我想要做什么。

有没有人可能有他们如何嘲笑这个的例子?


元芳怎么了
浏览 111回答 1
1回答

萧十郎

无法模拟类型,您只能模拟接口的实现。在您的情况下,我假设您正在尝试调用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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go