如果文件不是很大,不做任何模拟,在测试文件夹中创建文件,并使用它进行测试。
显然,您希望提取文件名作为函数的参数,因此您可以在测试中加载任何文件。
public void ProcessDataFromFile(string path)
{
var data = string.Join("", System.IO.File.ReadAllLines(path));
var text= new StringBuilder(data);
// process data
}
如果文件很大并且使测试变慢 - 创建一个用于读取数据的抽象包装器,您可以在测试中模拟它。
public interface IFileReader
{
string[] ReadAllLinesFrom(string path);
}
在生产代码中“注入”抽象到你需要读取文件的方法
public void ProcessDataFromFile(string path, IFileReader reader)
{
var data = string.Join("", reader.ReadAllLinesFrom(path));
var text= new StringBuilder(data);
// process data
}
对于测试,您可以创建自己的 IFileReader 实现
public class FakeFileReader : IFileReader
{
public Dictionary<string, string[]> Files { get; }
public FakeFileReader ()
{
Files = new Dictionary<string, string[]>();
}
public string[] ReadAllLinesFrom(string path)
{
return Files.GetValueOrDefault(path);
}
}
和测试
public void Test()
{
var fakeReader = new FakeFileReader();
var path = "pathToSomeFile"
var data = new[] { "Line 1", "Line 2", Line 3" };
fakeReader.Files.Add(path, data)
ProcessDataFromFile(path, fakeReader);
// Assert
}