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条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?