2008-10-17 86 views
4

我写了一个savefile方法来保存一个对象到xml。但我不确定如何在NUnit中测试该方法。我是否需要手动创建示例文件并比较文件之间的字符串?有没有更好的方法来测试这个方法?如何在NUnit中编写测试方法来测试savefile方法?

感谢您的回答。

+0

你可能想改写你的问题..如果你正在专门查看验证生成的XML。如何编写测试来验证XML输出? – Gishu 2008-10-17 16:17:46

回答

0

以下是我所做的 - 适用于我,但它可能不符合您的规格。

在拆解过程中,我确定删除了可能作为套件一部分创建的任何文件。所以是的,确保该文件是一个临时文件只用于测试

在测试方法中,我删除文件,如果它存在(它不应该作为拆卸已经照顾它),然后输出文件到XML然后声明文件存在。然后,我将文件重新加载到对象图或xml DOM中,并根据需要通过尽可能多的断言来查询状态。

如果您可以避免写入文件,并且您的设计允许您写入通用文本编写器或xml编写器,那么您可以绕过文件保存并用字符串编写器替换调用,而只是查询字符串。更清洁但不测试实际的文件持久性是否正常工作。

1

呃,验证XML输出。欢迎来到地狱:)

已经为我工作的方法是在内存中生成一个XmlDocument对象。然后运行您的SaveFile方法,并将其加载到另一个XmlDocument。递归地遍历两个XmlDocuments,比较所有元素和属性。

不幸的是,使用C#对象编写xml非常庞大。我建议一次测试小节。也许你的保存文件有一个<FileList>子元素,一个<Cups>子元素和<Rifles>子元素。在这种情况下,编写一系列测试以确保每个子部分都正确完成,而不是整个输出。

1

如果您显示代码会更容易。 我的解决方法是增加一层抽象。 不要让您的Save方法直接与XmlWriter交易。相反,创建一个包装器,每个包装器都能够将数据的小块逻辑块保存到xml中,然后对其进行测试。

每个包装有像

void Persist(XmlWriter writer); 

的方法,让保存刚刚从包装收集数据。换句话说,这将是Wrappers负责妥善保存数据,但每个人只负责其中的一小部分。 在那里,你可以通过比较字符串测试(放的StringWriter到您的XmlWriter传递到坚持法)

0

设计类,让你有SAVEFILE(字符串文件名)和SAVEFILE(XmlWriter的作家)。 SaveFile(字符串文件名)只需要为指定的文件创建一个XmlWriter并调用SaveFile(writer)。在可以使用模拟XmlWriter的SaveFile(XmlWriter writer)方法上进行广泛的单元测试。测试一些错误条件 - 如果您希望处理它们而不是传播它们 - 在SaveFile(字符串文件名)方法上。根据错误处理,您可能根本不需要创建文件。

顺便说一句,如果你不想直接使用XmlWriter,你不需要暴露你的方法。您可以将其设置为私有,并使用访问器在您的测试中调用它。

1

选项

  1. 简单化:使用 '黄金档案' 的做法。创建只读期望的输出文件作为资源。明智地比较字节/字符串与实际生成的文件。
  2. 我听说有人为此使用XmlUnit。从来没有使用过它,但可能值得一看