2011-05-05 5 views
8

Tengo algunas pruebas unitarias donde necesito asegurarme de que XML generado por un método contiene los mismos elementos/valores que un documento Xml esperado..net Xml comparer for UnitTesting

Usé xmlunit en Java, y aunque tienen una versión .net, no parece ser compatible con espacios de nombres. ¿Hay alguna alternativa dentro de .net para hacer esto?

Mientras yo sólo puedo comparar 2 cadenas XML y obtener un resultado verdadero/falso que me diga si coinciden en cuanto a los datos contenidos está preocupado estoy feliz ...

+0

¿Estás queriendo comparar los espacios de nombres, así, o sólo los nodos contenida en el XML –

Respuesta

3

Try Microsoft.XmlDiffPatch:

static public bool IsXmlEqual(XmlReader x1, XmlReader x2, 
    bool IgnoreChildOrder, bool IgnoreComments, bool IgnorePI, bool IgnoreWhitespace, 
    bool IgnoreNamespaces, bool IgnorePrefixes, bool IgnoreXmlDecl, bool IgnoreDtd 
) 
{ 
    XmlDiffOptions options = XmlDiffOptions.None; 
    if (IgnoreChildOrder) options |= XmlDiffOptions.IgnoreChildOrder; 
    if (IgnoreComments) options |= XmlDiffOptions.IgnoreComments; 
    if (IgnorePI) options |= XmlDiffOptions.IgnorePI; 
    if (IgnoreWhitespace) options |= XmlDiffOptions.IgnoreWhitespace; 
    if (IgnoreNamespaces) options |= XmlDiffOptions.IgnoreNamespaces; 
    if (IgnorePrefixes) options |= XmlDiffOptions.IgnorePrefixes; 
    if (IgnoreXmlDecl) options |= XmlDiffOptions.IgnoreXmlDecl; 
    if (IgnoreDtd) options |= XmlDiffOptions.IgnoreDtd; 

    XmlDiff xmlDiff = new XmlDiff(options); 
    bool bequal = xmlDiff.Compare(x1, x2, null); 
    return bequal; 
} 
+1

1 para MS XML parche de diferencia. ¿Hay un mejor enlace de descarga que http://msdn.microsoft.com/en-us/library/Aa302294? –

+0

Creo que eso es todo. Es una biblioteca bastante antigua (pero también lo es XML). Funciona a las mil maravillas. – Nestor

+0

También puede descargar MS XMLDiffPatch a través del administrador de paquetes NuGet en Visual Studio. –

7

Normalmente he encontrado que XNode.DeepEquals es suficiente para mis necesidades. Es parte del BCL, por lo que no se requiere ninguna descarga.

0

He utilizado el XMLDiff de MS es el pasado, pero preferí usar Beyond Compare 3 ya que tiene una mejor función de procesamiento de GUI y por lotes (aunque doenst tiene .NET API).

para su prueba, utilice XNode.DeepEquals o InnerXml comparar representación basada cadena

1

Algo a tener en cuenta acerca de MSXML XMLDiff es que si usted está comparando muy grandes documentos XML asegúrese de que su XMLDiff.Algorithm no es conjunto a "Preciso" o se te agotará la memoria. De forma predeterminada, está configurado en Automático, que es una opción segura ya que la API elegirá si usar Preciso o Rápido según el tamaño del archivo, el número de diferencias detectadas y otros factores. Aquí es una buena lectura para el inclinado más técnicamente:

http://treepatch.sourceforge.net/report.pdf