我该如何测试使用StreamReader读取文件的方法,我不想每次运行test时都在硬盘上创建文件,我只需要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
您使用的文件系统。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句