dsiv4041 2018-05-16 18:21
浏览 120
已采纳

我如何对AWS-SDK-GO-V2 DYNAMODB实现进行单元测试

I am still grasping go-interfaces and I can mock the WaitUntilTableExists func. But unable to mock PutItemRequest.

Here's my main.go snippet

func MyPutItem(d mydata, client dynamodbiface.DynamoDBAPI) error {
    input := &dynamodb.PutItemInput{
        ....
    }
    req := client.PutItemRequest(input)
    result, err := req.Send()
    log.Println(result)
    return err
}

main_test.go snippet

type mockDynamoDBClient struct {
    dynamodbiface.DynamoDBAPI
}

func (m *mockDynamoDBClient) PutItemRequest(input *dynamodb.PutItemInput) dynamodb.PutItemRequest {
    // Most probably this is where I need your help
}

func TestStoreInDynamoDB(t *testing.T) {
    var mockClient = new(mockDynamoDBClient)
    d := mydata{}
    result := DynampDBPutItem(d, mockClient)
    t.Log(result)
}
  • 写回答

2条回答 默认 最新

  • douyu4535 2018-05-29 13:08
    关注

    Faking the SDK like this works:

    main_test.go

    type fakeDynamoDBClient struct {
        dynamodbiface.DynamoDBAPI
    }
    
    func (m *fakeDynamoDBClient) GetItemRequest(input *dynamodb.GetItemInput) dynamodb.GetItemRequest {
        return dynamodb.GetItemRequest{
            Request: &aws.Request{
                Data: &dynamodb.GetItemOutput{
                    Item: map[string]dynamodb.AttributeValue{
                        "count": dynamodb.AttributeValue{
                            N: aws.String("10"),
                        },
                    },
                },
            },
        }
    }
    
    func (m *fakeDynamoDBClient) PutItemRequest(input *dynamodb.PutItemInput) dynamodb.PutItemRequest {
        return dynamodb.PutItemRequest{
            Request: &aws.Request{
                Data: &dynamodb.PutItemOutput{},
            },
        }
    }
    
    func TestUpdateCount(t *testing.T) {
        err := UpdateCount(10, &fakeDynamoDBClient{})
        if err != nil {
            t.Error("Failed to update badge count on dynamodb", err)
        }
    }
    

    main.go

    func UpdateCount(count int, client dynamodbiface.DynamoDBAPI) error {
        ...
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度