2017-06-04 2 views
1

J'ai essayé d'écrire un cas de test dans JUnit pour comparer deux fichiers xml. En utilisant xmlunit, je devrais être capable de trouver toutes les différences. Mais en comparant, je reçois false tout le temps, bien que je donne le même type de fichiers. L'horodatage est différent pour chaque fichier xml. Donc, bien que tous les autres contenus du fichier xml soient égaux, il renvoie false. S'il vous plaît me fournir tout moyen approprié pour gérer ce problème.Comment ignorer les éléments xml spécifiques en utilisant xmlunit lors de la comparaison de deux fichiers xml dans junit

Je dois ignorer la balise d'horodatage dans le fichier xml lors de la comparaison de deux fichiers xml. Et comment puis-je ignorer les balises de fermeture automatique?

<XML> 
<TIMESTAMP>KALA</TIMESTAMP> 
<B>JIHN</B> 
<C>Lion</C> 
</XML> 

<XML> 
<TIMESTAMP>QWER</TIMESTAMP> 
<B>JIHN</B> 
<C NAME =LION/> 
</XML> 
<B>JIHN</B> 
+0

Pourriez-vous transmettre le code XML via un modèle XSLT qui supprime toutes les parties indésirables, avant de faire la comparaison? –

Répondre

0

xmlunit 2.xa le concept de NodeFilter s, en utilisant que vous pouvez facilement ignorer les TIMESTAMP éléments. Quelque chose comme

String control = "<XML>\n" 
    + "<TIMESTAMP>KALA</TIMESTAMP>\n" 
    + "<B>JIHN</B>\n" 
    + "<C>Lion</C>\n" 
    + "</XML>"; 
String test = "<XML>\n" 
    + "<TIMESTAMP>QWER</TIMESTAMP>\n" 
    + "<B>JIHN</B>\n" 
    + "<C NAME=\"LION\"/>\n" 
    + "</XML>"; 
Diff d = DiffBuilder.compare(Input.fromString(control)) 
    .withTest(Input.fromString(test)) 
    .withNodeFilter(n -> !(n instanceof Element && Nodes.getQName(n).getLocalPart().equals("TIMESTAMP"))) 
    .build(); 

pourrait être un début.

Je ne suis pas sûr de ce que vous voulez dire par des étiquettes à fermeture automatique. <x></x> et <x/> sont identiques en ce qui concerne XMLUnit. Les éléments C dans votre exemple ne le sont clairement pas. Le premier n'a pas d'attributs mais un texte imbriqué, le second a un attribut nommé NAME mais aucun test imbriqué.

+0

Je ne pouvais pas déconseiller le code. S'il vous plaît expliquez-moi en détail sur la façon de mettre en œuvre dans le code. quand je donne une chaîne pour TEST, j'ai une erreur. Le test n'accepte pas la chaîne. "Diff d = DiffBuilder.compare (CONTROL) .with (TEST)". Je voudrais ignorer deux éléments différents du fichier XML autre que timestamp. En attente de votre aide. Merci d'avance – Teena

+0

@Teena J'ai édité le post pour contenir vos exemples complets plutôt que des espaces réservés (et fait de votre deuxième exemple XML bien formé en ajoutant des guillemets autour de la valeur de l'attribut 'NAME' et en omettant le second 'B'). Le code compile et si vous l'exécutez 'd' ne contiendra aucune différence à propos de' TIMESTAMP'. –

+0

Merci pour l'aide. C'était utile. un de plus ajouté à cela, je veux ignorer plus d'un tags, comment puis-je y parvenir? et le résultat aussi son retour identique. Comment puis-je imprimer d'autres différences aussi – Teena