我写了一个savefile方法来保存一个对象到xml。但我不确定如何在NUnit中测试该方法。我是否需要手动创建示例文件并比较文件之间的字符串?有没有更好的方法来测试这个方法?如何在NUnit中编写测试方法来测试savefile方法?
感谢您的回答。
我写了一个savefile方法来保存一个对象到xml。但我不确定如何在NUnit中测试该方法。我是否需要手动创建示例文件并比较文件之间的字符串?有没有更好的方法来测试这个方法?如何在NUnit中编写测试方法来测试savefile方法?
感谢您的回答。
以下是我所做的 - 适用于我,但它可能不符合您的规格。
在拆解过程中,我确定删除了可能作为套件一部分创建的任何文件。所以是的,确保该文件是一个临时文件只用于测试
在测试方法中,我删除文件,如果它存在(它不应该作为拆卸已经照顾它),然后输出文件到XML然后声明文件存在。然后,我将文件重新加载到对象图或xml DOM中,并根据需要通过尽可能多的断言来查询状态。
如果您可以避免写入文件,并且您的设计允许您写入通用文本编写器或xml编写器,那么您可以绕过文件保存并用字符串编写器替换调用,而只是查询字符串。更清洁但不测试实际的文件持久性是否正常工作。
呃,验证XML输出。欢迎来到地狱:)
已经为我工作的方法是在内存中生成一个XmlDocument
对象。然后运行您的SaveFile方法,并将其加载到另一个XmlDocument
。递归地遍历两个XmlDocuments,比较所有元素和属性。
不幸的是,使用C#对象编写xml非常庞大。我建议一次测试小节。也许你的保存文件有一个<FileList>
子元素,一个<Cups>
子元素和<Rifles>
子元素。在这种情况下,编写一系列测试以确保每个子部分都正确完成,而不是整个输出。
如果您显示代码会更容易。 我的解决方法是增加一层抽象。 不要让您的Save方法直接与XmlWriter交易。相反,创建一个包装器,每个包装器都能够将数据的小块逻辑块保存到xml中,然后对其进行测试。
每个包装有像
void Persist(XmlWriter writer);
的方法,让保存刚刚从包装收集数据。换句话说,这将是Wrappers负责妥善保存数据,但每个人只负责其中的一小部分。 在那里,你可以通过比较字符串测试(放的StringWriter到您的XmlWriter传递到坚持法)
设计类,让你有SAVEFILE(字符串文件名)和SAVEFILE(XmlWriter的作家)。 SaveFile(字符串文件名)只需要为指定的文件创建一个XmlWriter并调用SaveFile(writer)。在可以使用模拟XmlWriter的SaveFile(XmlWriter writer)方法上进行广泛的单元测试。测试一些错误条件 - 如果您希望处理它们而不是传播它们 - 在SaveFile(字符串文件名)方法上。根据错误处理,您可能根本不需要创建文件。
顺便说一句,如果你不想直接使用XmlWriter,你不需要暴露你的方法。您可以将其设置为私有,并使用访问器在您的测试中调用它。
选项
你可能想改写你的问题..如果你正在专门查看验证生成的XML。如何编写测试来验证XML输出? – Gishu 2008-10-17 16:17:46