我有一个使用 DynamoDbContext 在 DynamoDb 表中添加项目的方法。
var batchWriteObj = context.CreateBatchWrite<myDynamoDBModel>
(new DynamoDBOperationConfig { TableNamePrefix = "abc" });
batchWriteObj.AddPutItem(myDynamoDBModel);
我想在我的单元测试中测试这一部分。 由于 BatchWrite 没有任何构造函数,而且它的属性也不是虚拟的。我无法为其创建模拟。
有什么方法可以测试这段代码吗?也许通过嘲笑 BatchWrite?
您是否考虑过使用 DynamoDB local 来运行测试?它还有一个额外的优点,即验证您的调用是否正在执行您期望的操作。我不久前为其创建了一个帮助程序包 (https://www.nuget.org/packages/Wadsworth.DynamoDB.TestUtilities/)。它只是管理在 Docker 容器中本地启动 DynamoDB。您可以在here查看其来源,其中包括一个示例。
我必须为此编写一个简单的包装器。
public interface IBatchWriteWrapper<T>
{
IBatchWriteWrapper<T> CreateBatchWrite();
void AddPutItems(List<T> items);
Task ExecuteAsync(CancellationToken cancellationToken = default);
}
public class BatchWriteWrapper<T>(IDynamoDBContext _dynamoDb) : IBatchWriteWrapper<T>
{
private BatchWrite<T>? _batchWrite;
public IBatchWriteWrapper<T> CreateBatchWrite()
{
_batchWrite = _dynamoDb.CreateBatchWrite<T>();
return this;
}
public void AddPutItems(List<T> items)
{
_batchWrite?.AddPutItems(items);
}
public Task ExecuteAsync(CancellationToken cancellationToken = default)
{
return _batchWrite?.ExecuteAsync(cancellationToken) ?? Task.CompletedTask;
}
}