如何测试使用
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);
}
}
注意:此代码仅用于测试目的,并非真正的业务案例。
您可以使用 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
,以便使用您提供的文件系统。