单元测试:创建复杂的XDocument来测试XML阅读器

本文关键字:XML 测试 XDocument 创建 复杂 单元测试 | 更新日期: 2023-09-27 17:57:19

我有两个类XmlWriter和XmlReader,它们在内部使用XDocument来存储/读取简单的值,如双精度,字符串和数组。

XmlWriter类基本上看起来像这样

class XmlWriter
{
    internal XDocument document;
    Set(string name, double value);
    Set(string name, Int32 value);
    …
    SaveToFile(string filename);
}

现在,如果我想为 Set(字符串,双精度)方法创建一个 UnitTest,我可以轻松地使用文档字段来检查是否已使用 XPath 添加了正确的元素。

xmlWriter.Set("something," 123);
var myAddedElement = xmlWriter.document.XPathSelectElement(…);
Assert.AreEqual(myAddedElement.Value, 123);

此方法适用于 XmlWriter。 然而,XmlReader测试起来非常棘手。据我所知,我有两个选择:

首先,我可以使用 XmlWriter 为 XmlReader 的单元测试设置 XDocument。

//Quick and dirty to give you an idea
writer.Set("something", 123);
reader.document = writer.document;
Assert.AreEqual(123, reader.Get("something");

我不太喜欢这样,因为现在 XmlReader 的 UnitTests 严重依赖 XmlWriter 类。如果我破坏了XmlWriter类,XmlReader的单元测试肯定会失败。

我想到的另一个选择是手动创建XDocument,这将变得非常乏味,特别是如果XmlStructure稍微复杂一点。

你对此事有何看法?

提前谢谢。

单元测试:创建复杂的XDocument来测试XML阅读器

我看不到你的实现,但 IMO 你的类看起来像一个 XDocument 包装器,所以你的单元测试需要测试你的类在 XDocument 上调用预期的方法。 我会模拟 XDocument 并验证您期望的方法是否被调用用于设置、获取、保存。 否则,您最终将尝试对各种XML可能性进行单元测试,而XDocument已经处理了这项工作。