我如何测试使用StreamReader读取文件的方法, 我不想每次运行测试时都在硬盘上创建文件, 我只需要sr.ReadToEnd();成为我期望的字符串
public class ConfigStore : IConfigStore
{
public string ReadFile(string FileName)
{
string result;
using(StreamReader sr=new StreamReader(FileName) )
{
result= sr.ReadToEnd();
}
//logic to be tested
return result+1;
}
}
和我的考试班
[TestClass]
public class UnitTest2
{
[TestMethod]
public void Shoud_Add_1_To_File_Content()
{
//arrange
ConfigStore configStore = new ConfigStore();
//act
var returntype=configStore.ReadFile("config.json");
//assert
Assert.AreEqual ("test1",returntype);
}
}
注意:代码仅用于测试目的,不是真实的业务案例。
谢谢。
答案 0 :(得分:1)
您可以使用System.IO.Abstractions库来使您的方法单元可测试。
您需要向FileSystem
类添加属性ConfigStore
。
// Default file system uses .NET Framework's File class
public IFileSystem FileSystem { get; set; } = new FileSystem();
第二,您需要使用此文件系统而不是StreamReader
或直接使用System.IO.File
:
public string ReadFile(string FileName)
{
return FileSystem.File.ReadAllText();
}
然后,您需要实现伪造的IFileSystem
并覆盖必要的方法,例如,在File.Create
方法中,您可以将传递的文件名添加到集合中,或者什么也不做。
然后,最后一步是创建该虚假文件系统的实例,并将其分配给ConfigStore.FileSystem
,以便将使用您提供的文件系统。