Test d'unité de Génération de données XML
Ce que les tests unitaires sont les stratégies des personnes recommandent pour les tests xml est généré correctement.
Au courant de mes tests semblent abit primitif, quelque chose le long des lignes de:
[Test]
public void pseudo_test()
{
XmlDocument myDOC = new XmlDocument();
mydoc = _task.MyMethodToMakeXMLDoc();
Assert.AreEqual(myDoc.OuterXML(),"big string of XML")
}
Vous devez vous connecter pour publier un commentaire.
D'abord, comme à peu près tout le monde dit que, valider le XML si il y a un schéma défini pour elle. (Si il n'y a pas, en définir un.)
Mais vous pouvez construire des tests qui sont beaucoup plus précis que celui de l'exécution des requêtes XPath sur le document, par exemple:
Ceci vous permet de tester non seulement de savoir si ou non votre document est sémantiquement valide, mais si oui ou non la méthode de production est le remplissant avec les valeurs que vous attendez.
XMLUnit peut vous aider.
Couramment Affirmations est une excellente bibliothèque pour exprimer test affirmations contenues dans un fluide, facile à lire, le style. Il fonctionne avec toutes les grandes infrastructures de Test Unitaire.
Il a aussi quelques fonctionnalités XML (toutes prises à partir de ces exemples ici), par exemple:
Notez que cela fonctionne avec LINQ-to-XML plutôt que l'objet XmlDocument spécifié dans la question d'origine, mais personnellement ces jours-ci, je trouve que je suis à l'aide de LINQ-to-XML comme un premier choix.
Il est également facilement extensible, si vous souhaitez ajouter d'autres XML assertions pour s'adapter à vos besoins.
Une autre possibilité pourrait être d'utiliser XmlReader et à la vérification d'une erreur de comptage > 0. Quelque chose comme ceci:
Validation XML schéma ou DTD, cochez aussi la clé que les nœuds ont les valeurs que vous attendez.
Si vous avez un format standard que vous attendez la sortie, pourquoi ne pas créer un schéma XML ou de DTD et de valider à l'encontre de cela. Cela ne dépend pas des données, de manière flexible. Également définir la façon dont le XML peut être formé peut être utile lors de la conception de votre système.
Ce blog par marianor donne un moyen léger de comparer XElement structures, donc je vais essayer ça avant de s'attaquer à XMLUnit.
Le XML est normalisé par trier les noms d'élément et attribut.
Les valider par rapport à un schéma XSD à l'aide de XmlSchema classe. Son trouvé en vertu de System.XML je pense que.
Une autre option serait d'écrire une sérialisation (de la classe XMLSerializer) pour désérialiser votre XML dans un objet. Le gain sera qu'il sera implicitement valider votre structure et après que les valeurs puissent être facilement accessibles pour les essais à l'aide de l'objet résultant.
Une autre raison d'utiliser un Schéma pour la validation, c'est que tandis que les noeuds qui sont explicitement ordonné, attributs XML ne sont pas.
Donc votre comparaison de chaînes de:
serait un échec si les attributs sont dans un ordre différent, comme pourrait facilement se produire si un peu de XML a été créé manuellement et l'autre par programmation.
Vérifier que le document est bien formé
Vérifiez que le document est valide
Vérifiez le document résultant est correct.
Sans doute, vous ouvrez un document XML de données utiles, de sorte que vous voulez vous assurer que vous avez le droit de la couverture des entrées pour vos tests. Les problèmes les plus communs que je vois sont
Donc, si vous ne l'avez pas déjà fait, vous devez passer en revue le XML spécification pour voir ce qui est autorisé dans chaque lieu.
Combien de "recherche" qui devrait arriver dans chaque test n'est pas immédiatement clair. Il va beaucoup dépendre de ce qu'est une unité qui est dans votre espace de problème, je suppose. Il semble raisonnable que chaque unité de test est de vérifier qu'un morceau de données est correctement exprimé dans le XML. Dans ce cas, je suis d'accord avec Robert, qui l'a une façon simple de vérifier que vous trouverez le bon de données à un seul emplacement XPath est le meilleur.
Pour plus de tests automatisés, où vous voulez vérifier l'intégralité du document, ce que j'ai trouvé pour être efficace est d'avoir des résultats Attendus, qui est aussi un document, et marcher à travers elle de nœud en nœud, à l'aide d'expressions XPath pour trouver le nœud correspondant dans le document lui-même, puis en appliquant la bonne comparaison des données codées dans les deux nœuds.
Avec cette approche, vous aurez normalement l'attraper tous les échecs à la fois, plutôt que de l'abandon sur le premier échec, de sorte que vous devrez peut-être tricksy sur la façon dont vous suivre où les erreurs sont survenues.
Avec un peu plus de travail, vous pouvez reconnaître certains types d'éléments comme étant excusé à partir d'un test (comme un horodateur), ou de valider qu'ils sont des pointeurs vers les nœuds équivalents, ou... ce genre de vérification personnalisée que vous voulez.
J'ai l'intention sur l'utilisation de cette nouvelle Les Essais D'Approbation de la bibliothèque à l'aide de la norme XML de test.
Il semble être parfait pour le travail, mais lisez d'abord vous-même que je n'ai pas d'expérience dans l'utilisation il.
pourquoi ne pas supposer que certains commerciaux analyseur xml est de corriger et de valider votre code xml contre elle? quelque chose comme.
autre que cela, et si vous voulez être approfondie, je dirais que vous devez construire un analyseur de vous-même et de valider chaque règle de la spécification xml exige.
Vous pouvez utiliser une DTD pour vérifier la validité du xml généré.
Pour tester le bon contenu, je voudrais aller XMLUnit.
Affirmant xml à l'aide de XMLUnit:
Une chose que vous pourriez rencontrer est le fait que le xml généré peut contenir de changer les identifiants (id/uid attributs ou similaire). Ce problème peut être résolu par l'utilisation d'un DifferenceListener en revendiquant le xml généré.
Exemple de mise en œuvre de ces DifferenceListener:
à l'aide de DifferenceListener: