在这里,我已经在c#类库中编写了几行代码,以使用 IO.File 读取HTML文件内容。 代码如下。
var data = string.Join("", System.IO.File.ReadAllLines("./template1.html"));
var text= new StringBuilder(data);
现在对于同一行代码,我需要编写测试用例,以模拟我想找出的 IO.File 。 有人可以帮忙吗?
答案 0 :(得分:2)
如果文件不是很大,则不进行任何模拟,在测试文件夹中创建文件,并将其用于测试。
显然,您希望将文件名提取为函数的参数,以便可以在测试中加载任何文件。
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
}