如何单元测试读取xml文件的类?

Nig*_*ker 6 .net unit-testing nmock2

我需要为读取xml文件并解析其内容的类编写单元测试.我该如何模拟文件读取?因为测试的所有内容都应该是针对读取文件的.

我在nUnit中使用nmock2.

谢谢

Jon*_*eet 7

正如rwwilden所说,如果你使用基于流的API而不是基于文件名的API,生活会轻松得多.使用模拟在这里并不十分合适,IMO; 你没有做"协议测试" - 你只需要一个数据源.

您还可以提供一个过载,这是一个简单的实用方法:

 public Result ParseXml(string file)
 {
     using (Stream stream = File.OpenRead(file))
     {
         return ParseXml(stream);
     }
 }
Run Code Online (Sandbox Code Playgroud)

然后,您可以合理安全地测试该方法 - 毕竟它没有重要的逻辑.

现在,您可以通过在代码中使用硬编码字符串测试基于流的API,然后调用Encoding.UTF8.GetBytes(xml)并构建MemoryStream生成的字节数组...但我通常更喜欢在测试项目中使用单独的数据文件.将内容类型设置为"嵌入式资源",然后使用Assembly.GetManifestResourceStream获取测试文件的流.

如果这确实是一个普通的XML文件,你真的想自己做解析吗?您是否有任何理由不想将其留在框架中,并根据DOM API,LINQ to XML或XmlReader?来表达您的API ?