我有一个使用StreamWriter写入文件的类。嘲笑StreamWriter /确定何时模拟
public void CreateLog(string errorLogFilePath, StringBuilder errorLogBuilder, string errorMessage)
{
using (StreamWriter sw = new StreamWriter(errorLogFilePath, true)
{
errorLogBuilder.Apend("An error was discovered.");
//....
sw.Write(errorLogBuilder.ToString());
}
}
[问题]
1:是否有可能检查.WRITE()方法被调用?
2:我是否需要在StreamWriter内部包装MemoryStream才能测试它,而无需实际访问硬盘驱动器。一个StreamWriters构造函数接受一个流,但它声明以下内容+ UTF-8编码是否会影响这个?
使用UTF-8编码和默认缓冲区大小为指定流初始化StreamWriter类的新实例。
3:如何确定一个类是否实际访问hd并因此需要被模拟? (对不起,如果这最后一个问题听起来很愚蠢,但我真的有点困惑于此)。
感谢您的回复。关于(3),我指的是MemoryStream,StreamReader,StreamWriter等。你如何知道哪一个实际访问HD?大约一个月前,我问了一个类似的问题,Jon Skeet说我可以在StreamReader中包装一个memoryStream。为什么我不能在这里做同样的事情? –
@HansRudel你确实可以在这里做同样的事情(顺便提一下,StreamWriter的构造函数可以让你提供一个流*和*指定编码),但是我发现这种方法更简单。使用内存流创建StreamWriter将允许您在没有模拟框架的情况下编写测试,但是您使用了'moq'标记,那么为什么不只是模拟抽象类呢? – phoog
@HansRudel我忘记了地址(3)。访问HD的类是FileStream。当您将文件路径而不是流传递给StreamWriter构造函数时,StreamWriter会创建一个FileStream。如果你有一个StreamWriter并想知道它正在写什么(文件,内存,其他),你应该能够通过检查它的BaseStream属性来确定它。 – phoog