c# - 方法返回 xmldocument 的单元测试

标签 c# xml unit-testing

我需要为返回 xmldocument 的方法创建单元测试。在这种情况下我应该验证什么?该方法检查数据库并创建 xmldocument 并将数据发送回客户端。

我是否应该查看返回的 xmldocument 是否包含所有预期的 xml 标记?或者我应该有一个 Expected.xml 文件并匹配随此 xml 文件返回的 xmldocument。如果我采用第二种方法,那么数据库中不存在我正在搜索的任何内容,那么此测试将始终失败。我想编写一个不依赖于任何特定数据的测试,但应该检查该方法返回的数据是否正确,所以我倾向于只检查标签的方法,并假设标签是否存在并且这些标签中的值也是正确的。

让我们假设我为一个图书馆应用程序编写这个测试,该应用程序给出了发行给特定成员的所有书籍的列表。成员由 id 标识并设为字符串:

<Member id="">
 <Book>
   <Name>Book_name</Name>
   <Author>author</Author>
   <Due_date>due date </Due_Data>
 </Book>
</Member>

所以我需要验证我的方法是否会像上面那样返回一个 xmlfile。我需要验证标签是否正确并且它包含值(而不是空值)。

您认为应该采取什么更好的方法?如果有人以前处理过此类情况,那么如果您能分享您的经验就太好了。

谢谢,

最佳答案

问题不在于 XmlDocument - 检查它是否与预期输出相匹配很容易。

您的问题更多与测试输入数据有关。在这种情况下,您要么需要针对专门设置的测试数据库运行代码,以便您可以依赖它始终为给定查询返回相同的数据,要么您需要模拟数据库(通过您自己的类调用数据库,以便您可以将其替换为一些简单地伪装成数据库并返回您希望尝试的单元测试输入的代码)

一旦您可以为该方法提供定义明确的测试输入,您就可以验证每个测试输入是否产生所需的测试输出 - 单元测试。

如果您希望不那么严格,那么您可以检查数据库是否返回格式正确的 XML 文档(包含一组关键的元素和属性),但这仍然需要您有一些有效的输入数据测试(因此您可能仍然需要测试或模拟数据库)并且不会彻底测试该方法。

编辑

要回答您的编辑,您可以很容易地测试 XmlDocument 的特定位是否“有效”。例如根元素是“Member”:

Assert(doc.DocumentElement.Name == "Member");

根元素是否有非空且没有子元素的子元素“Name”?

Assert(doc.DocumentElement["Name"] != null);
Assert(!string.IsNullOrEmpty(doc.DocumentElement["Name"].InnerText));
Assert(doc.DocumentElement["Name"].ChildNodes.Count == 0);

等等

关于c# - 方法返回 xmldocument 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168659/

相关文章:

c# - C#中的慢速屏幕绘制

c# - HttpClient不报告从Web API返回的异常

php - php 中的 xml 解析 - 获取特定值

unit-testing - 使用 jasmine 进行 Angular 2 可观察错误测试

java - 如何为 Netbeans 中运行的 TestNG 测试用例生成 html 报告?

javascript - 当我不进行任何 GitHub API 调用时,GitHub API 会抛出错误

c# - 使用斜杠定义 ASP.NET MVC 路由

c# - 如何对先前的 InvokeMember 结果调用 InvokeMember?

c# - 处置 XDocument 对象

c# - 从 XSLT 中的变量集输出回车