【发布时间】:2018-12-04 19:56:45
【问题描述】:
我正在尝试弄清楚如何或是否可以使用 Moq 执行以下操作
public class Download
{
private IFoo ifoo;
public Download(IFoo ifoo)
{
this.ifoo = ifoo;
}
public void Download()
{
var files = Directory.GetFiles("filepath"); //<<<===
foreach (var item in files)
{
// do something
}
}
}
在单元测试中。
// Arrange
var mockFoo = new Mock<IFoo>();
mockFoo.setup( s => s.Bar()).returns(true);
var foo = new Foo(mockFoo.Object);
// Act
foo.Download()
如何模拟files 变量,因此该方法使用模拟版本。这甚至是正确的方法吗?因为我不是在模拟类,而是在模拟依赖项,所以我该如何设置 files 变量以便它查看模拟的文件 string[]。
【问题讨论】:
-
与静态
Directory紧密耦合。应该将其提取出来并封装在您控制的抽象后面 -
好点,我可以使用短期解决方案吗?抽象将需要一些时间,因为这是一个简化的示例
-
除非你能找到一个可以编织该调用的模拟库。我认为 TypeMock 可以,但我不确定它是否免费
-
您可能还可以检查 Microsoft Fakes docs.microsoft.com/en-us/previous-versions/visualstudio/…
-
看看这个:docs.microsoft.com/en-us/dotnet/api/…。这包含用于读取物理文件的类,还包含可以模拟的抽象。因此,与其依赖
Directory.GetFiles("filepath"),不如依赖IFileProvider.GetDirectoryContents("path");
标签: c# .net unit-testing moq