【发布时间】:2019-07-30 12:43:19
【问题描述】:
我正在尝试最小化一个 Azure CloudBlockBlob 并让它返回一个 Stream 以便我可以测试我的 BlobStorage 存储库是否正确处理输出。
但不知何故,返回的流总是空的。
单元测试代码:
//....
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write("sample data");
writer.Flush();
stream.Position = 0;
var blobMock = new Mock<CloudBlockBlob>(new Uri("http://tempuri.org/blob"));
blobMock
.Setup(m => m.ExistsAsync())
.ReturnsAsync(true);
blobMock
.Setup(m => m.DownloadToStreamAsync(It.IsAny<MemoryStream>()))
.Returns(Task.FromResult(stream));
//....
存储库代码:
//....
var blob = GetContainer(container).GetBlockBlobReference(name);
if (await blob.ExistsAsync())
{
var ms = new MemoryStream();
await blob.DownloadToStreamAsync(ms);
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
//....
所以我返回的 MemoryStream ms 始终是一个空流,而不是我在 Moq Returns() 方法中使用的 stream 对象。
如何让该 blob 返回我的示例流?
【问题讨论】:
-
这是两个不同的流。获取在模拟参数中传递的流并复制测试流。
-
那不是
DownloadToStreamAsync将我的样本流复制到ms吗? -
不,不是。而且该方法还返回一个普通的任务。不是流本身
标签: c# asp.net-core azure-storage moq