unit-testing - 如果流中有多个 GetItem(),如何模拟 AWS DynamoDB?
问题描述
事件处理程序.go
func eventHandler(Id) error {
eventDetails, err := GetEventStore(svc.Connection.DynamoDBClient, Id)
if err != nil {
log.Error("Error while reading Store", err)
return err
}
if eventDetails.status == "completed" {
config, err := GetConfig(svc.Connection.DynamoDBClient, Key)
if err != nil {
log.Error("Error while reading Config Store", err)
return err
}
// process it
}
return nil
}
我们的大部分数据都存储在存储中,因此在为 eventHandler 编写单元测试时如何使用多个 GetItemOutput 模拟DynamoDB?
eventHnadler_test.go
...
eventDetails := {
//data
}
config := {
//data
}
DB := client.DynamoDBClient{
Client: mockDynamoDB{
Output: dynamodb.GetItemOutput{
Item: eventDetails,
},
Error: tc.Error,
},
}
...
可以在 GO aws sdk v2 中模拟多个 get 调用吗?
解决方案
因为 AWS dynamo DB 进行了重组所以
github.com/aws/aws-sdk-go-v2/service/dynamodb/dynamodbiface
不再存在您必须实现自己的界面才能进行适当的发电机模拟
您的围绕 aws 实施的包装器应该是类似的东西
type Dynamodb struct {
Client DynamoAPI
}
type DynamoAPI interface {
GetItem(ctx context.Context, params *dynamodb.GetItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.GetItemOutput, error)
UpdateItem(ctx context.Context, params *dynamodb.UpdateItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.UpdateItemOutput, error)
PutItem(ctx context.Context, params *dynamodb.PutItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.PutItemOutput, error)
DeleteItem(ctx context.Context, params *dynamodb.DeleteItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.DeleteItemOutput, error)
Query(ctx context.Context, params *dynamodb.QueryInput, optFns ...func(*dynamodb.Options)) (*dynamodb.QueryOutput, error)
Scan(ctx context.Context, params *dynamodb.ScanInput, optFns ...func(*dynamodb.Options)) (*dynamodb.ScanOutput, error)
}
这可能是你的嘲笑
type mockDynamodb struct {
rbaws.DynamoAPI
*dynamodb.Client
clientError error
}
func (m mockDynamodb) GetItem(ctx context.Context, params *dynamodb.GetItemInput, optFns ...func(*dynamodb.Options)) (*dynamodb.GetItemOutput, error) {
return &dynamodb.GetItemOutput{
Item: map[string]types.AttributeValue{},
}, m.clientError
}
推荐阅读
- typescript - 子对象中键的打字稿对象映射
- swift - 如何从 FileDocument 中获取文件名
- sas - SAS:如何组合文本和日期字段
- reactjs - 如何在 VictoryLegend 组件的 style 道具内圆角?
- php - 具有默认参数值的 php7 函数存在问题
- python-3.x - 写入文件时出现 Apache Spark o27.csv 错误
- html - 需要帮助将页脚的内容居中
- python - 阻塞 Tyk Gateway 中间件导致请求排队
- web-manifest - android“安装应用程序”导致“添加到主屏幕”具有不同的图标
- firebase - Flutter Firestore 快照正在返回数据,但 Firestore 数据库为空