2016-05-04 9 views
0

Ich bin neu im Komponententest und frage mich, welche Best Practices für Unit Testing xml deserialisation gelten.Komponententest XML-Deserialisierung

Betrachten Sie das folgende xml:

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

Und die folgende Modellklasse für die Menschen:

[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; } 
    } 

ich deserialisieren die Verwendung von 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; 
     } 

Was das Beste wäre, Methoden zum Unit-Test der GetListOfPeople-Methode oben?

Antwort

0

Wenn Sie Ihre Methode ändern können, um eine XML-Datei als Eingabeparameter zu verwenden, können Sie eine Beispiel-XML-Datei erstellen und Ihrem Testprojekt hinzufügen. Da Sie die Werte Ihrer XML-Datei kennen, können Sie mit dem direkten Vergleichen der Werte beginnen.

Betrachtet Sie die Beispieldatei, die Sie in Ihrem Test zur Verfügung gestellt, können Sie wie folgt überprüfen:

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

Wenn die XML-Datei von einer Quelle, um Ihren Code kommt und Sie denken, es könnte nicht Folgen Sie Ihrem XML-Schema die ganze Zeit, dann können Sie wahrscheinlich wieder einige Beispiel-XML-Dateien erstellen, die Ihr Schema verletzen und Tests vorbereiten, um Ihre Methode aufzurufen, die eine Ausnahme auslösen sollte, wenn das Schema nicht korrekt ist.

Hoffe, das hilft.

+1

Das macht Sinn. Also werde ich eine Testmethode für eine gültige "samlpe.xml" und auch eine Testmethode mit einer ungültigen xml samle haben, die eine ExpectedException attritbute anwendet. Vielen Dank. – cutthejargon