xUnit .Net Core 5中如何Mock ShareDirectoryClient的GetFilesAndDirectoriesAsync方法
解决方案
方案一:使用官方提供的ShareModelFactory构造(推荐)
Azure Storage Files SDK 内置了ShareModelFactory静态类,专门用于生成各类抽象存储模型实例,无需额外Mock操作:
using Azure.Storage.Files.Shares.Models; // 参数可根据测试需要调整,按需传入即可 ShareFileItem testFileItem = ShareModelFactory.ShareFileItem( isDirectory: false, name: "test-demo.txt", fileSize: 2048, eTag: new ETag("\"demo-etag-123\""), lastModified: DateTimeOffset.UtcNow );
如果要构造目录类型的实例,将isDirectory参数设置为true即可。
方案二:用Moq直接Mock抽象类
如果需要自定义ShareFileItem的特殊行为,可以直接Mock抽象类:
Mock<ShareFileItem> mockFileItem = new Mock<ShareFileItem>(); // 按需设置需要用到的属性返回值 mockFileItem.Setup(m => m.IsDirectory).Returns(false); mockFileItem.Setup(m => m.Name).Returns("test-demo.txt"); mockFileItem.Setup(m => m.FileSize).Returns(2048); ShareFileItem testFileItem = mockFileItem.Object;
配置GetFilesAndDirectoriesAsync方法返回
构造好ShareFileItem实例后,按以下方式配置ShareDirectoryClient的Mock返回即可:
// 构造异步分页返回结果 var testPage = Page<ShareFileItem>.FromValues(new[] { testFileItem }, null, Mock.Of<Response>()); var testPageable = AsyncPageable<ShareFileItem>.FromPages(new[] { testPage }); // 配置Mock方法匹配规则和返回值 mockShareDirectoryClient.Setup(c => c.GetFilesAndDirectoriesAsync( It.IsAny<string>(), It.IsAny<CancellationToken>())) .Returns(testPageable);
注意事项
ShareModelFactory位于Azure.Storage.Files.Shares.Models命名空间下,需要保证测试项目已安装对应版本的Azure.Storage.Files.SharesNuget包- 如果仅需要使用
ShareFileItem的基础属性,优先选择ShareModelFactory构造实例,代码更简洁,不需要额外维护Mock逻辑
内容的提问来源于stack exchange,提问作者N Krishnia
相关产品推荐
相关产品推荐

