首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对读取xml文件的类进行单元测试?

如何对读取xml文件的类进行单元测试?
EN

Stack Overflow用户
提问于 2010-06-13 15:21:49
回答 2查看 3.7K关注 0票数 6

我需要为一个读取xml文件并解析其内容的类编写单元测试。我怎样才能模拟文件读取?因为测试的所有内容都应该是针对读取文件的。

我在nUnit中使用nmock2。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-13 15:39:00

正如rwwilden建议的那样,如果使用基于流的API而不是基于文件名的API,生活会容易得多。在这里使用mocking并不是非常合适,IMO;你不是在做“协议测试”--你只是想要一个数据源。

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

代码语言:javascript
复制
 public Result ParseXml(string file)
 {
     using (Stream stream = File.OpenRead(file))
     {
         return ParseXml(stream);
     }
 }

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

现在,您可以通过在代码中使用硬编码字符串,然后调用Encoding.UTF8.GetBytes(xml)并围绕生成的字节数组构建一个MemoryStream来测试基于流的应用程序接口。但我通常更喜欢在我的测试项目中使用单独的数据文件。设置内容类型为"embedded resource“,然后使用Assembly.GetManifestResourceStream获取指向测试文件的流。

但是,如果这真的是一个普通的XML文件,那么您真的想自己进行解析吗?您有什么理由不想把它留给框架,而用DOM、LINQ to XML或XmlReader来表达您的API

票数 7
EN

Stack Overflow用户

发布于 2010-06-13 15:33:26

您所要做的就是找到一种方法来告诉您的类要读取哪个文件。因此,这在一定程度上取决于您的类是如何实现的。最简单的方法是这样的:

代码语言:javascript
复制
public class ClassToTest : IClassToTest
{
    public Result ParseXml(Stream xml)
    {
        // Parse xml and return result.
        return ...;
    }
}

[Test]
public void TestParseXml()
{
    // Get xml stream to test from somewhere.
    Stream xmlStream = ...;

    // Call method to test.
    var result = new ClassToTest().ParseXml(xmlStream);

    // Assert results.
    Assert.IsNotNull(result);
    ...
}

其思想是以某种方式为正在测试的类提供一个xml文件,该文件是您创建的,并且您知道该文件的解析结果是什么。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3031409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档