【问题标题】:How do you test code that does file IO?您如何测试执行文件 IO 的代码?
【发布时间】:2013-08-17 03:49:33
【问题描述】:

鉴于以下课程,您将如何为它编写单元测试?我读过任何执行文件 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();
        }
    }
}

【问题讨论】:

  • 你想用你的单元测试覆盖什么?什么是通过/失败测试的示例?

标签: c# unit-testing integration-testing moq xunit


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多