2008-11-09 25 views
9

Tengo un montón de pruebas unitarias que deben verificar las salidas XML.La mejor manera de comparar 2 documentos XML en .NET

Comencé comparando cadenas pero esto no va a escalar ya que el formateo y las diferencias superficiales se interponen en el camino.

¿Cuál es la forma más fácil en .NET para evaluar si el XML generado es semánticamente el mismo que espera la prueba?

Cerradas como duplicado de How would you compare two XML Documents?

+0

La misma pregunta [aquí] (http://stackoverflow.com/questions/167946/how-would-you-compare-two-xml-documents). –

Respuesta

11

Microsoft ofrece a sus herramientas/clases here Diff XML. No he utilizado personalmente, pero parece que va a empezar:

"Mediante el uso de la clase XMLDiff, la programador es capaz de determinar si los dos archivos son de hecho diferentes basan en las condiciones que son importantes a su aplicación"

parece que hacer frente a diferentes pedidos, el espaciado, los prefijos de espacio de nombres, etc.

5

Este es uno de esos problemas que suena como que va a ser fácil comenzar w ith, pero cuanto más cavas, más profundidad encuentras en el espacio problemático.

Hay una serie de herramientas preexistentes que generarán xml diffs, ambas en forma de GUI (en la misma línea que las herramientas textuales diff) y comandos/componentes de línea de comandos (que son más de lo que ' d be after). XMLDiff es uno de esos casos, como ya se ha mencionado.

Los problemas comienzan cuando hace preguntas como: ¿qué quiero que muestre? ¿Simplemente desea un código de retorno que diga si son iguales o diferentes (para fines de prueba de la unidad esto puede ser suficiente) o desea un informe que le diga cuáles son las diferencias? (¿También podría ser útil para pruebas unitarias si quieres saber cuál es el problema)? Si es este último, ¿cómo quieres esa información? ¿Quieres editar la distancia? ¿Desea que interprete los valores numéricos y le indique la diferencia entre ellos?

¿Qué ocurre con el pedido de nodos? ¿Deben los nodos secundarios estar en un orden particular, o si son los mismos nodos pero en un orden diferente, está bien?

Probablemente también quiera poder especificar qué comparar. ¿Deben coincidir los espacios de nombres? ¿El espacio en blanco es significativo en alguna parte? ¿Hay ciertos nodos que siempre desea ignorar (por ejemplo, un atributo de "tiempo"), o desea un control más preciso sobre exactamente qué nodos se comparan y cuáles no?

Para las comparaciones numéricas, ¿desea tolerar las tolerancias? Para las comparaciones textuales (nodos de texto), ¿es el espacio en blanco dentro de el texto significante? ¿Qué pasa con la capitalización?

Y puede seguir y seguir (como lo he hecho en un análisis para un proyecto de este tipo en el que trabajo recientemente).

Cada herramienta aborda estos problemas en diferentes grados y de diferentes maneras.

Puede optar por mantenerlo lo más simple posible e ir por algo que haga una comparación directa, nodo por nodo, sin interpretación, y al final indique si son iguales o diferentes. Creo que xmldiff te dará eso (y un poco más).

También vale la pena pensar es, si desea manejar casos como diferentes ordenamientos de nodos, o ignorar ciertas ramas, puede aplicar una transformación xslt a su documento de prueba antes de la comparación, para normalizar de acuerdo con sus reglas.

Cuestiones relacionadas