我在Go中使用AWS SDK,但在单元测试DynamoDB更新时遇到了问题。基本上,我使用gomock
来设置预期的UpdateItemInput
,如下所示:
return m.EXPECT().UpdateItemWithContext(
gomock.Any(),
&dynamodb.UpdateItemInput {
ConditionExpression: aws.String("(#0 = :0) AND (#1 = :1)"),
ExpressionAttributeNames: map[string]*string{
"#0": aws.String("PK"),
"#1": aws.String("SK"),
"#2": aws.String("SomeAttrName"),
},
ExpressionAttributeValues: map[string]*dynamodb.AttributeValue {
":0": {S: aws.String(primaryKey)},
":1": {S: aws.String(secondaryKey)},
":2": {S: aws.String(ValueToUpdate)},
},
Key: map[string]*dynamodb.AttributeValue{
"PK": {S: aws.String(primaryKey)},
"SK": {S: aws.String(secondaryKey)},
},
ReturnValues: aws.String(dynamodb.ReturnValueAllNew),
TableName: aws.String(dynamo.TableName),
UpdateExpression: aws.String("SET #2 = :2n"),
}
然而,当我运行测试时,它失败了,因为gomock的期望和结果之间似乎不匹配。每次运行测试时,来自业务逻辑的UpdateItemInput
中的值的位置都不同,我认为这就是造成问题的原因。
在Go中有更好的方法来测试这样的东西吗?或者,如果没有,是否有办法每次都执行相同的命令,或者忽略该命令?
看看Github:中的GO单元测试示例
https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/gov2/dynamodb/ScanItems