【问题标题】:Testing an NSXMLParserDelegate class测试一个 NSXMLParser 委托类
【发布时间】:2012-03-08 16:45:35
【问题描述】:

我已经实现了 NSXMLParserDelegate 协议,并且似乎正在使用 NSXMLParser 成功解析 XML。我正在解析的 XML 的 XSD 相当多地涉及 100 个左右的标签和属性,这些标签和属性有时会嵌套得相当深。我正在从 XML 文档中的数据填充对象层次结构,到目前为止一切似乎都很顺利。

我的问题是,我如何有效地测试这个?我的委托中有很多“if/else if”逻辑以及 BOOL 标志来跟踪我在正在解析的文档中的位置。在编写委托时,我很容易引入印刷错误。

我最初的想法是创建一个使用 XSD 中指定的所有元素和属性的测试输入文档。解析完成后,我可以“NSLog()”插入到对象层次结构中的所有内容,但这似乎太费力了。

有没有更好的方法来思考这个问题,还是我应该卷起袖子来蛮力解决?

【问题讨论】:

  • 上周我将委托重构为数据类型类的层次结构,其中父/子关系表示 xsd 中的元素关系。不再有 BOOL 或 if/else-if 逻辑树。我现在可以根据 xsd 将这些类表示的数据类型连接在一起。我还在类实现的协议中添加了一个 printContents 方法。 printContents 方法将存储在对象中的数据作为适当的 XML 输出,然后调用其子对象来执行相同的操作。我能够将输出用作输入,并且经过一些修复后,两者都匹配了。

标签: objective-c ios xml ipad unit-testing


【解决方案1】:

你会想看看在这里使用单元测试。如果您可以生成一个(或多个)会产生已知数据结构的文件,则可以在单元测试中解析它们并验证数据结构是否符合您的预期。

我们使用许多我们管理的用于解析和生成的 XML 文件类型来做到这一点(为了好玩,我们在另一个单元测试中将生成器的输出连接到解析器)。

Apple 提供了很多关于设置 Unit Tests 的良好背景信息,并且很多开源项目也使用单元测试。

使用这样的方案,您最终会编写一个比较器(或使用 isEqual: 如果这适用于您的对象层次结构),然后您可以在每个测试中重用它。添加一些 XML 文件并在单元测试中手动创建匹配的对象层次结构,一切就绪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多