Golang:模拟具有相同方法名称的AWS服务

jac*_*pal -1 unit-testing interface go amazon-web-services

我正在使用两个AWS服务(Glue和DynamoDB),并且这两个服务都具有相同的方法名称,CreateTable因此在模拟这些服务时会CreateTable is ambiguous出错。

胶水:CreateTable https://docs.aws.amazon.com/sdk-for-go/api/service/glue/#Glue.CreateTable

DynamoDB:CreateTable https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#DynamoDB.CreateTable

有什么办法解决这个问题?

码:

type UpdateWorkflow struct {
    glueIface glueiface.GlueAPI
    dbIface   dynamodbiface.DynamoDBAPI
    tableName string
}

func NewUpdateWorkflow(tableName string) *UpdateWorkflow {
    sess := sessions.NewSession()
    return &UpdateWorkflow{
        dbIface:   dynamodb.New(sess),
        glueIface: glue.New(sess),
        tableName: tableName,
    }
}
Run Code Online (Sandbox Code Playgroud)

单元测试:

// MockUpdateWorkflow is a mock implementation of gluetestutils and dynamodb service
type MockUpdateWorkflow struct {
    glueiface.GlueAPI
    dynamodbiface.DynamoDBAPI
    mock.Mock
}

func setup() (*UpdateWorkflow, *MockUpdateWorkflow) {
    mockClient := new(MockUpdateWorkflow)
    mockServices := &UpdateWorkflow{
        glueIface: mockClient,
        dbIface:   mockClient,
        tableName: mockTableName,
    }
    return mockServices, mockClient
}
Run Code Online (Sandbox Code Playgroud)

Bur*_*dar 5

如果函数名称冲突,则不能嵌入接口,必须使用命名字段:

type MockUpdateWorkflow struct {
    g glueiface.GlueAPI
    d dynamodbiface.DynamoDBAPI
    mock.Mock
}

func setup() (*UpdateWorkflow, *MockUpdateWorkflow) {
    mockClient := new(MockUpdateWorkflow)
    mockServices := &UpdateWorkflow{
        glueIface: mockClient.g,
        dbIface:   mockClient.d,
        tableName: mockTableName,
    }
    return mockServices, mockClient
}
Run Code Online (Sandbox Code Playgroud)