34 votes

Tests unitaires de génération XML

Quelles stratégies de tests unitaires les gens recommandent-ils pour tester xml sont générés correctement.

Mes tests actuels semblent plutôt primitifs, quelque chose comme:

 [Test]
public void pseudo_test()
{
   XmlDocument myDOC = new XmlDocument();
   mydoc = _task.MyMethodToMakeXMLDoc();

   Assert.AreEqual(myDoc.OuterXML(),"big string of XML")
}
 

22voto

Robert Rossney Points 43767

Tout d'abord, comme à peu près tout le monde le dit, validez le XML s'il y a un schéma défini pour lui. (S'il n'y en a pas, définissez-en un.)

Mais vous pouvez créer des tests beaucoup plus précis que cela en exécutant des requêtes XPath sur le document, par exemple:

 path = "/doc/element1[@id='key1']/element2[. = 'value2']";
Assert.IsTrue(doc.SelectSingleNode(path) != null);
 

Cela vous permet de tester non seulement si votre document est sémantiquement valide, mais également si la méthode qui le produit le remplit avec les valeurs que vous attendez.

12voto

Ionuț G. Stan Points 62482

XMLUnit peut vous aider.

6voto

Mike K. Points 423

Une autre possibilité pourrait être d'utiliser XmlReader et de vérifier un nombre d'erreurs> 0. Quelque chose comme ceci:

     void CheckXml()
    {
        string _xmlFile = "this.xml";
        string _xsdFile = "schema.xsd"; 
        StringCollection _xmlErrors = new StringCollection();

        XmlReader reader = null;
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandler);
        settings.ValidationType = ValidationType.Schema;
        settings.IgnoreComments = chkIgnoreComments.Checked;
        settings.IgnoreProcessingInstructions = chkIgnoreProcessingInstructions.Checked;
        settings.IgnoreWhitespace = chkIgnoreWhiteSpace.Checked;
        settings.Schemas.Add(null, XmlReader.Create(_xsdFile));
        reader = XmlReader.Create(_xmlFile, settings);
        while (reader.Read())
        {
        }
        reader.Close();
        Assert.AreEqual(_xmlErrors.Count,0);
    }    

    void ValidationEventHandler(object sender, ValidationEventArgs args)
    {
        _xmlErrors.Add("<" + args.Severity + "> " + args.Message);
    }
 

4voto

svinto Points 8601

Validez par rapport au schéma XML ou DTD, vérifiez également que les nœuds ont les valeurs que vous attendez.

3voto

Jeremy French Points 7609

Si vous avez un format standard que vous attendez de la sortie, pourquoi ne pas créer un schéma XML ou DTD et valider par rapport à cela. Cela ne dépendra pas des données, il sera donc flexible. Définir également comment le XML peut être formé peut être utile lors de la conception de votre système.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X