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

时间:2013-08-15 00:29:07

标签: c# unit-testing integration-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();
        }
    }
}

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

可能这是一个你不需要写的测试例子。

但是,如果你想测试实际的文件级别的东西。您可以将已知文件写入特定位置,然后测试读取的二进制文件与预先设定的二进制流相同。