我正在尝试编写一个单元测试来写入它使用 File.OpenWrite() 打开的文件。
我正在使用 SystemWrapper 的 IFileWrap 接口包装文件。在生产中,我使用 SimpleInjector 来注入 SystemWrapper 的 FileWrap 类的实例,并且工作正常。但是我试图在我的单元测试中使用 MOQ 来模拟 IFileWrap,但这是行不通的。
我是 SystemWrapper 的新手,我正在尽我所能弄清楚它的用途。据我所知,IFileWrap.OpenWrite() 返回一个 IFileWrap 实例,您可以从中获取带有 FileStreamInstance 的流。
因此,在我的测试类中,我在构造函数中注入了一个 IFileWrap:
public class ClassUnderTest
{
private readonly IFileWrap fileWrap;
public ClassUnderTest(IFileWrap fileWrap)
{
this.fileWrap = fileWrap;
}
...
}
在我的测试方法中,我从 FileStreamInstance 获取流:
var fsWrap = this.fileWrap.OpenWrite(fullPath);
var ostream = fswrap.FileStreamInstance;
这在生产中工作得很好,其中 fileWrap 是用 FileWrap 的实例实例化的。但在我的测试中,我试图为 File.OpenWrite 创建一个 Mock,它返回一个模拟的 FileStream:
var fileStreamMock = new Mock<IFileStreamWrap>();
var fileMock = new Mock<IFileWrap>();
fileMock.Setup(fm => fm.OpenWrite(It.IsAny<string>())).Returns(fileStreamMock.Object);
var classUnderTest = new ClassUnderTest(fileMock.Object);
当我在调试器中从我的单元测试中遍历被测方法时,fsWrap.FileStreamInstance 为空,而我希望它是我的模拟文件流。
关于我做错了什么的任何想法?