【问题标题】:How to write a test method in NUnit for testing a savefile method?如何在 NUnit 中编写测试方法来测试保存文件方法?
【发布时间】:2008-10-17 15:55:54
【问题描述】:

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

感谢您的回答。

【问题讨论】:

  • 您可能需要改写您的问题.. 如果您专门查看验证生成的 xml。如何编写测试来验证 XML 输出?

标签: nunit tdd


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果您显示代码会更容易。 我解决这个问题的方法是添加一个抽象层。 不要让您的 Save 方法直接处理 XmlWriter。而是创建包装器,每个包装器都能够将数据的小逻辑块保存到 xml,并对其进行测试。

    每个 Wrapper 都有一个类似的方法

    void Persist(XmlWriter writer);
    

    让 Save 只从包装器中收集数据。换句话说,正确保存数据是 Wrappers 的责任,但每个人只负责其中的一小部分。 在那里你可以通过比较字符串来测试它(将 StringWriter 放入 XmlWriter 你传递给 Persist 方法)

    【讨论】:

      【解决方案3】:

      选项

      1. 简单化:使用“黄金文件”方法。创建一个只读的预期输出文件作为资源。与实际生成的文件进行字节/字符串比较。
      2. 我听说有人为此目的使用XmlUnit。从未亲自使用过,但可能值得一看

      【讨论】:

        【解决方案4】:

        这就是我所做的——它对我有用,但可能不符合您的要求。

        在拆解过程中,我确保删除了我可能在套件中创建的所有文件。所以是的,请确保该文件是一个临时文件,仅用于测试

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

        如果您可以避免写入文件并且您的设计允许您写入通用文本写入器或 xml 写入器,那么您可以绕过文件保存并用字符串写入器替换调用,而只需查询一个字符串。干净得多,但它并没有测试实际的文件持久性是否有效。

        【讨论】:

          【解决方案5】:

          设计你的类,使你有 SaveFile(string fileName) 和 SaveFile(XmlWriter writer)。 SaveFile(string filename) 只需要为命名文件创建一个 XmlWriter 并调用 SaveFile(writer)。对可以使用模拟 XmlWriter 的 SaveFile(XmlWriter writer) 方法进行广泛的单元测试。在 SaveFile(string filename) 方法上测试一些错误条件——如果您希望处理它们而不是向上传播它们。根据错误处理,您可能根本不需要创建文件。

          顺便说一句,如果您不想这样做,则无需直接使用 XmlWriter 公开您的方法。您可以将其设为私有并使用访问器在您的测试中调用它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-02-28
            • 2011-04-25
            • 1970-01-01
            • 1970-01-01
            • 2022-11-18
            • 1970-01-01
            相关资源
            最近更新 更多