.net 如何使用Moq在C#中模拟Azure存储帐户?

jq6vz3qz  于 2022-12-05  发布在  .NET
关注(0)|答案(1)|浏览(135)

我有一个服务IBlobService

public interface IBlobService
{
    public Task<BlobInfo> GetBlobAsync(string name);
    public Task<IEnumerable<string>> ListBlobsAsync();
    public Task UploadFileBlobAsync(string filePath, string fileName);
    public Task UploadContentBlobAsync(string content, string fileName);
    public Task DeleteBlobAsync(string blobName);
}

下面是BlobService类中GetBlobAsync方法的实现:

public async Task<BlobInfo> GetBlobAsync(string name)
{
    var client = _blobContainerClient.GetBlobClient(name);
    var blobDownloadInfo = await client.DownloadContentAsync();
    return new BlobInfo(blobDownloadInfo.Value.Content, blobDownloadInfo.Value.Details.ContentType);
}

我正在尝试弄清楚如何使用Moq来实现我的测试。我对Moq还比较陌生。有什么想法或指导吗?
我试着回顾这个博客https://devblogs.microsoft.com/azure-sdk/unit-testing-and-mocking/
但是我仍然发现自己被卡住了。我正在努力找出实现我的测试的最好方法。

osh3o9ms

osh3o9ms1#

如果你想做一个单元测试来测试blobservice或者一个类 * 使用 * IblobService
如果它是一个使用IBlobService的类,则需要模拟IBlobService
就像这样

...
public void Test1() {
   var blobServiceMocked = new Mock<IBlobService>();
   blobServiceMocked.Setup(e => e.GetBlobAsync(It.IsAny<string>()).Returns(new BlobInfo(){ ... }); 
blobServiceMocked.Object;
... 

// assert
  _methodThatTakesIBlobservice(blobServiceMocked.Object);
...

相关问题