【发布时间】:2018-12-20 17:23:10
【问题描述】:
我需要为以下方法编写单元测试:
private async Task<bool> CreateFileAsync(string fileContent, string containerName, string fileName, string connectionString)
{
CloudStorageAccount cloudStorageAccount = await GetCloudStorageAccount(connectionString);
CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
CloudBlobContainer containerRef = blobClient.GetContainerReference(containerName);
CloudBlockBlob blobRef = containerRef.GetBlockBlobReference(fileName);
await blobRef.UploadTextAsync(fileContent);
return true;
}
我需要编写一个 xUnit 单元测试,它会在调用 blobRef.UploadTextAsync(fileContent) 时抛出一个 HttpException。
Microsoft.WindowsAzure.Storage.CloudBlockBlob : Microsoft.WindowsAzure.Storage.Blob.ICloudBlob
但是CloudStorageAccount 没有实现接口,所以看起来我不能模拟它。
以下是一些示例单元测试代码,这些代码基于我对模拟的理解,并针对此特定场景拼凑而成:
var cloudBlockBlobMock = new Mock<ICloudBlob>();
cloudBlockBlobMock
.Setup(cbb => cbb.UploadTextAsync("test"))
.Throws<HttpException>();
var fileUploader = new FileUploader(cloudBlockBlobMock);
fileUploader.CreateFileAsync("test");
CreateFileAsync() 是可单元测试的吗?
在不模拟其父对象的情况下模拟子对象是否可能/有效?
【问题讨论】:
-
显示的代码 sn-p 与实现问题紧密耦合,这会使模拟变得困难。
-
什么是
GetCloudStorageAccount? edit 带有minimal reproducible example 的问题以获得关于您的问题的更好建议。
标签: c# azure unit-testing mocking moq