Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回xmldocument方法的单元测试_C#_Xml_Unit Testing - Fatal编程技术网

C# 返回xmldocument方法的单元测试

C# 返回xmldocument方法的单元测试,c#,xml,unit-testing,C#,Xml,Unit Testing,我需要为返回xmldocument的方法创建一个单元测试。在这种情况下,我应该验证什么?该方法检查数据库并创建xmldocument,然后将数据发送回客户端 我是否应该查看返回的xmldocument是否具有所有预期的xml标记?或者我应该有一个预期的.xml文件,并与此xml文件返回的xmldocument匹配。如果我使用第二种方法,那么无论我搜索的是什么,数据库中都不存在,那么这个测试总是会失败。我想编写一个不依赖于任何特定数据的测试,但应该检查方法返回的数据是否正确,因此我倾向于只检查标记

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

我是否应该查看返回的xmldocument是否具有所有预期的xml标记?或者我应该有一个预期的.xml文件,并与此xml文件返回的xmldocument匹配。如果我使用第二种方法,那么无论我搜索的是什么,数据库中都不存在,那么这个测试总是会失败。我想编写一个不依赖于任何特定数据的测试,但应该检查方法返回的数据是否正确,因此我倾向于只检查标记并假设标记是否存在以及这些标记中的值是否正确的方法

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

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

书名
作者
到期日
因此,我需要验证我的方法是否会返回如上所述的XML文件。我需要验证标记是否正确,它是否包含值(而不是空值)

你认为什么是更好的方法?如果有人曾经处理过这种情况,如果你能分享你的经验,那就太好了


谢谢,

生成的文档是否总是100%相同,或者您是否需要实际验证文档中的数据

如果是100%,我将在测试项目中存储预期文档的文件副本,将其添加到资源文件中,并进行直接的字符串比较

如果是特定的数据,我将以相同的方式在测试项目中存储文档的精简版本,并创建一个比较引擎,该引擎接收两个文档,并将其中一个(存储的资源)中的所有现有值读取到测试目标中的对应值


如果100%版本适用于您的场景,那么它会更简单、更准确。

问题不在于XmlDocument,而在于检查它是否与预期输出相符

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

一旦可以为方法提供定义良好的测试输入,就可以验证每个测试输入是否生成所需的测试输出—单元测试

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

编辑

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

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

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

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