你如何测试文件IO的代码?

Sam*_*Sam 6 c# integration-testing unit-testing moq xunit

鉴于以下课程,您将如何为其编写单元测试?我已经读过,任何执行文件IO的测试都不是单元测试,所以这是一个需要编写的集成测试吗?我正在使用xUnit和MOQ进行测试,我对它很新,所以也许我可以MOQ文件?不确定.

public class Serializer
{
    public static T LoadFromXmlFile<T>(string path)
        where T : class
    {
        var serializer = new XmlSerializer(typeof(T));

        using (var reader = new StreamReader(path))
        {
            return serializer.Deserialize(reader) as T;
        }
    }

    public static void SaveToXmlFile<T>(T instance, string path)
    {
        var serializer = new XmlSerializer(typeof(T));

        using (var writer = new StreamWriter(path))
        {
            serializer.Serialize(writer, instance);

            writer.Flush();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jes*_*and 6

在类似的情况下,我修改了方法签名以接受TextWriter或Stream(取决于具体情况)和单元测试,通过传入StringWriters或MemoryStreams并将得到的字符串或字节数组与预期结果进行比较.从那里可以相当安全地假设FileWriter或FileStream将在文件中生成相同的输出,假设路径有效并且您具有必要的权限.