单元测试XML反序列化

时间:2016-05-04 09:31:41

标签: c# xml unit-testing xml-deserialization

我是单元测试的新手,我想知道单元测试xml反序列化的最佳实践是什么。

考虑以下xml:

<people>
  <person id="1">
    <name>Joe</name>
    <age>28</age>
  </person>
  <person id="2">
    <name>Jack</name>
    <age>38</age>
  </person>
</people>

以下为人们的模特课:

    [XmlRoot(ElementName ="people")]
    public class People
    {
        public People() { PeopleList = new List<Person>(); }

        [XmlElement("person")]
        public List<Person> PeopleList { get; set; }
    }

    public class Person
    {
        [XmlAttribute("id")]
        public int id { get; set; }

        [XmlElement("name")]
        public string Name { get; set; }

        [XmlElement("age")]
        public int Age { get; set; }
    }

我使用:

反序列化xml
        public List<Person> GetListOfPeople()
        {
            People plist = new People();

            string content;
            using (StreamReader sr = new StreamReader(manager.Open("People.xml")))
            {
                var serializer = new XmlSerializer(typeof(People));
                plist = (People)serializer.Deserialize(sr);
            }


            return plist.PeopleList;
        }

对上面的GetListOfPeople方法进行单元测试的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您可以更改方法以将xml文件作为输入参数,则可以创建示例xml文件并将其添加到测试项目中。由于您知道xml文件的值,因此可以直接开始比较这些值。

考虑到您将使用测试中提供的示例文件,您可以这样验证:

var persons = x.GetListOfPeople("sample.xml");
Assert.AreEqual("Joe", persons[0].Name);
Assert.AreEqual(38, persons[1].Age);

如果xml文件来自某些来源的代码并且您认为它无法一直跟随您的xml架构,那么您可能会再次创建一些违反您的架构并准备测试的示例xml文件调用你的方法,如果架构不正确,应抛出一些异常。

希望这有帮助。