You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.Shares Nuget包
  • 如果仅需要使用ShareFileItem的基础属性,优先选择ShareModelFactory构造实例,代码更简洁,不需要额外维护Mock逻辑

内容的提问来源于stack exchange,提问作者N Krishnia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:15:03