我想确保我的C#程序按预期读取文件。我该怎么测试呢?我假设我只是调用我的函数(访问文件系统)并查看文件存在时的输出以及何时不存在。我应该改为抽象文件系统吗?
我是否应该费心去测试(因为我基本上测试StreamReader.ReadLine
是否有效)?
我的函数看起来像这样(filePath,filePath2,a和b是函数的参数)
try
{
TextReader tr = new StreamReader(filePath);
a = tr.ReadLine();
b = tr.ReadLine();
tr.Close();
}
catch (Exception ex)
{
error = GetError(ex);
}
if (error != "") {
File.WriteAllText(filePath2+"Error.txt", error);
}
答案 0 :(得分:0)
两种最常见的方法:所有文件IO操作的外观(因此您可以模拟它)或重构代码,您只需要测试易于模拟Stream
对象的片段。
第二种方法示例:将您的代码重构为处理获取流的片段和另一个实际读取数据的片段:
public class MyClass
{
.............
string a;
string b;
public ReadTheData(Stream stream)
{
try
{
TextReader tr = new StreamReader(stream);
a = tr.ReadLine();
b = tr.ReadLine();
tr.Close();
}
catch (Exception ex)
{
// awful practice... Don't eat all exceptions
error = GetError(ex);
}
if (error != "") {
// whatever log infrastructure you have, need to be mock-able for tests
Logger.Log(error);
}
}
}
现在,您可以通过传递填写的ReadTheData
甚至模拟出的流来对单元测试MemoryStream
方法进行无法访问文件系统。