【问题标题】: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<IFileInfo>。 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);
}