单元测试依赖于StreamReader读取文件的方法

皮疹

我该如何测试使用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);

    }
}

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

谢谢。

塞尔曼·杨(Selman Young)

您可以使用System.IO.Abstractions库来使您的方法单元可测试。

您需要向FileSystem您的ConfigStore班级添加一个属性

// Default file system uses .NET Framework's File class
public IFileSystem FileSystem { get; set; } = new FileSystem();

其次,您需要使用此文件系统代替StreamReaderSystem.IO.File直接使用

public string ReadFile(string FileName)
{
    return FileSystem.File.ReadAllText();
}

然后,您需要实现一个伪造IFileSystem并覆盖必要的方法,例如,在File.Create方法中,您可以改为将传递的文件名添加到集合中,或者什么也不做。

然后,最后一步是创建该伪造文件系统的实例,并将其分配给ConfigStore.FileSystem您使用的文件系统。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章