.net - NSubstitute 或 moq ListBlobsSegmentedAsync 及其 ContinuationToken
问题描述
我正在尝试为以下方法创建单元测试用例。我试图模拟容器 ListBlobsSegmentedAsync 但 response.ContinuationToken 变空。所以代码在两者之间崩溃。你们能否建议如何为以下方法编写单元测试。
public List<IListBlobItem> GetListBlobsAsync(CloudBlobContainer container)
{
BlobContinuationToken continuationToken = null;
var results = new List<IListBlobItem>();
do
{
var response = container.ListBlobsSegmentedAsync(continuationToken).Result;
continuationToken = response.ContinuationToken;
results.AddRange(response.Results);
}
while (continuationToken != null);
return results;
}
我试图编写单元测试如下。
[TestMethod]
public void GetListBlobsAsync_Test()
{
// Arrange
var items = new List<IListBlobItem>();
items.Add(new CloudBlockBlob(new Uri("http://bogus/myaccount/blob/myfiles/test1.txt")));
items.Add(new CloudBlockBlob(new Uri("http://bogus/myaccount/blob/myfiles/test2.txt")));
items.Add(new CloudBlockBlob(new Uri("http://bogus/myaccount/blob/myfiles/test3.txt")));
var client = Substitute.For<CloudBlobClient>(new Uri("http://foo.bar/"), null);
var continuationToken = new BlobContinuationToken() { NextMarker = "abc123" };
var container = Substitute.For<CloudBlobContainer>(new Uri("http://foo.bar/"));
client.GetContainerReference(Arg.Any<string>()).Returns(container);
container.ListBlobsSegmentedAsync(Arg.Any<string>(), Arg.Any<bool>(),
Arg.Any<BlobListingDetails>(),
Arg.Any<int?>(),
Arg.Any<BlobContinuationToken>(),
Arg.Any<BlobRequestOptions>(),
Arg.Any<OperationContext>(),
Arg.Any<CancellationToken>())
.Returns(ci => new BlobResultSegment(items.ToArray(), continuationToken));
// Act
var readDeleteOperations = new ReadDeleteOperations();
var result = readDeleteOperations.GetListBlobsAsync(container);
// Assert
result.Count.Should().Be(items.Count);
}
但是 ListBlobsSegmentedAsync 方法没有正确模拟并返回 null。所以请建议我应该如何模拟这种方法。提前致谢!!
解决方案
看起来代码正在调用:
ListBlobsSegmentedAsync(BlobContinuationToken)
但测试是嘲笑:
ListBlobsSegmentedAsync(String, Boolean, BlobListingDetails, Nullable<Int32>,
BlobContinuationToken, BlobRequestOptions, OperationContext, CancellationToken)
尝试更新测试以消除与代码相同的重载,如果它仍然无法按预期工作,请告诉我。
推荐阅读
- ionic-framework - 无法加载资源:Access-Control-Allow-Origin 不允许 Origin ionic://localhost
- javascript - 是什么导致控制台错误“无法读取 HTMLTableRowElement 处未定义的属性‘setAttribute’”
- ios - 如何设置 cocoapods?
- r - 在 for 循环中每个循环都取第一个和第五个元素吗?
- javascript - 如何在javascript中的动态内容中创建动态内容
- python-3.x - 如何监控 EC2 中托管的 API(Flask)
- r - 删除重复行并对数据框中最后一列的相应值求和
- python - 在图像中的一组点周围寻找不同的边界
- entity-framework - 使用附加或单一的实体框架更新
- django - html问题中的Django循环