如何测试执行文件IO的代码

本文关键字:文件 IO 代码 执行 何测试 测试 | 更新日期: 2023-09-27 18:27:39

给定以下类,您将如何为其编写单元测试?我读到任何做文件IO的测试都不是单元测试,所以这是一个需要编写的集成测试吗?我正在使用xUnit和最小起订量进行测试,我对它很陌生,所以也许我可以对文件进行最小起订价?不确定。

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

如何测试执行文件IO的代码

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

这可能是一个不需要编写的测试示例。

但是,如果您想测试实际的文件级内容。你可以把一个已知的文件写到一个特定的位置,然后测试读入的文件的二进制流是否与预先录制的二进制流相同。