对依赖于 StreamReader 来读取文件的方法进行单元测试

问题描述 投票:0回答:1

如何测试使用

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);
    
        }
    }

注意:此代码仅用于测试目的,并非真正的业务案例。

c# unit-testing
1个回答
3
投票

您可以使用 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
,以便使用您提供的文件系统。

© www.soinside.com 2019 - 2024. All rights reserved.