【问题标题】:How to mock a FileProvider in C#?如何在 C# 中模拟 FileProvider?
【发布时间】:2020-09-18 14:09:30
【问题描述】:

我有一个看起来像这样的单元测试:

public class MyFileProviderTest {
  private readonly MyFileProvider subject;
  private readonly Mock<IFileProvider> fileprovider = new Mock<IFileProvider>;

  public MyFileProviderTest {
    subject = new MyFileProvider(fileprovider.Object)
  }

  [Fact]
  public void GetAssets(){
     fileprovider.Setup(x => x.GetDirectoryContents(It.IsAny<string>())).Returns(new ?????);
  }
}

应该怎么办??????是 ?。我在 Microsoft 文档中找不到合适的示例。

【问题讨论】:

    标签: c# unit-testing testing mocking


    【解决方案1】:

    这取决于您要测试的内容。我的意思是GetDirectoryContents 应该返回一个实现IDirectoryContents 类型的对象,而IDirectoryContents 又“实现”IEnumerable&lt;IFileInfo&gt;IDirectoryContents 接口本身声明了单个属性 - Exists。因此,您可能希望使用模拟的 Exists 方法或 GetEnumerator 方法或两者返回类型的对象。

    您可以以以下为例,然后根据您要测试的内容进行编辑:

    [Fact]
    public void GetAssets()
    {
        var directoryContentsMock = new Mock<IDirectoryContents>();
        directoryContentsMock.Setup(dc => dc.GetEnumerator()).Returns(new List<IFileInfo>().GetEnumerator());
        directoryContentsMock.Setup(dc => dc.Exists).Returns(false);
    
        fileprovider.Setup(x => x.GetDirectoryContents(It.IsAny<string>())).Returns(directoryContentsMock.Object);
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 2012-10-09
      • 2017-08-03
      • 1970-01-01
      • 2021-03-03
      • 2011-08-02
      • 2021-06-22
      • 2018-03-08
      • 2015-12-11
      相关资源
      最近更新 更多