Unit testing System.IO.Abstraction可以';我找不到IStreamWriter
我正在尝试对调用StreamWriter的方法进行单元测试,我正在尝试使用System.IO.Abstraction来模拟StreamWriter,但是在上一次查看源代码时,我找不到接口,但不知道用什么替代它,其他东西,如FileInfo,正在按预期工作Unit testing System.IO.Abstraction可以';我找不到IStreamWriter,unit-testing,mocking,nunit,moq,Unit Testing,Mocking,Nunit,Moq,我正在尝试对调用StreamWriter的方法进行单元测试,我正在尝试使用System.IO.Abstraction来模拟StreamWriter,但是在上一次查看源代码时,我找不到接口,但不知道用什么替代它,其他东西,如FileInfo,正在按预期工作 谢谢,我还在寻找如何通过System.IO.Abstractions模拟文件流,但一开始看不到。它挂起了FileInfo对象。它会导致代码有点笨重,需要进行转换。我的原始代码: FileStream fileStreamBack = null;
谢谢,我还在寻找如何通过System.IO.Abstractions模拟文件流,但一开始看不到。它挂起了FileInfo对象。它会导致代码有点笨重,需要进行转换。我的原始代码:
FileStream fileStreamBack = null;
using (fileStreamBack = new FileStream(fileFrom, FileMode.Open, FileAccess.Read))
using (var fileStreamf = new FileStream(fileTo, FileMode.Create, FileAccess.Write))
{
fileStreamBack.CopyTo(fileStreamf); // Use the .Net
fileStreamBack.Flush(); // Making sure
fileStreamBack.Close(); // Making sure
}
现在替换为
FileStream fileStreamBack = null;
using (fileStreamBack = (FileStream)_fileSystem.FileInfo.FromFileName(fileFrom).Open(FileMode.Open, FileAccess.Read))
using (var fileStreamf = (FileStream)_fileSystem.FileInfo.FromFileName(fileTo).Open(FileMode.Create, FileAccess.Write))
{
fileStreamBack.CopyTo(fileStreamf); // Use the .Net
fileStreamBack.Flush(); // Making sure
fileStreamBack.Close(); // Making sure
}
System.IO.Abstractions.TestingHelpers中还有一个MockFileStream对象(为了我们的方便!)接受@BarryMcDermid的答案并稍微修改一下,您可以按照以下方式做一些事情:
using (Stream fs = _fileSystem.FileStream.Create(filePath, FileMode.Create))
{
ms.CopyTo(fs);
fs.Flush();
fs.Close();
}
通过将“FileStream”声明为流
而不是FileStream
,您将能够使用System.IO.Abstraction.TestingHelpers测试此代码,而不会出现异常
有一个更全面的例子。1。你从哪里看到System.IO.Abstracts有一个IStreamWriter接口?似乎没有。2.无论如何,为什么您需要对StreamWriter进行抽象?StreamWriter已经是一种抽象——它可以处理您提供给它的任何流。只要让你的测试给它一个MemoryStream而不是FileStream就行了。有用的是这个链接:或者这个也可能有用:@JoeWhite可能来自这里。有一种稍微简单一点的方法来获取我在回答中显示的文件流