2009-02-05 5 views
8

¿Alguien sabe si existe algo como XMLUnit para C++? Estoy buscando una manera fácil de verificar nodos, valores, etc. en una salida XML. Estamos usando la prueba de Google en Visual Studio, pero supongo que cualquier biblioteca que haga el trabajo más fácil será suficiente.XMLUnit para C++

Estoy usando Xerces como un analizador XML, pero XMLUnit (http://xmlunit.sourceforge.net/) tiene algunas características envueltas en el analizador XML que son muy útiles para las pruebas unitarias. Por ejemplo, afirma el uso de expresiones XPath, funciones para comparar dos XMLs "similares", etc.

+0

Cuando dice "cheques" ... ¿Qué quiere decir? Tengo mi propia clase de Plantilla STL para tratar con XML que funciona bastante bien, y es muy estrecha, muy eficiente. Me permite leer nodos, consultar niños, obtener el texto de los nodos, junto con todas las propiedades ... Y comprueba que el XML sea válido, durante el tiempo de ejecución, en XML Open, etc. ¿Está buscando una Lib XML que comparará dos archivos XML para ver si realmente se igualan entre sí, incluso si las etiquetas están formateadas de forma un poco diferente? – LarryF

+0

Sí ... Eso puede ser una tarea difícil. Pero estoy trabajando en otro proyecto que se utiliza para comparar dos 'cadenas' para ver qué tan similares son. Con mi clase XML, PODRÍA leer dos archivos y comparar dos nodos, y darle una idea de cuán estrechamente 'relacionados' están ... (El texto, no las etiquetas, pero ...) – LarryF

Respuesta

-1

Puede utilizar TinyXML paquete aquí: tinyxml

que estoy trabajando con él y es bastante agradable y libre de errores.

Es un manejo xml. Supongo que no fue diseñado para pruebas unitarias, pero puede usarlo para verificar/probar sus archivos xml. Como se esperaba, carga el xml en un objeto DOM y proporciona una buena API para ejecutar en los nodos.

Gal

-1

Xerces en http://xerces.apache.org/xerces-c/ i bastante completamente equipado, tiene una interfaz de C++ y produce buenos mensajes de error, que varios otros analizadores XML no lo hacen así. Habiendo dicho eso, es bastante grande & He terminado usando mi propio envoltorio alrededor del analizador C Expat.

-1

Actualmente estoy usando libxml ++ para un proyecto personal mío.

-1

Utilizo Boost property_tree para xml, fácil de usar, bastante robusto y funciona bien con el marco de prueba de la unidad Boost.

+0

Puedo ver cómo pongo xml dentro y fuera de un árbol de propiedades, pero no veo ninguna característica para probar la unidad. ¿Hay alguna manera de comparar árboles de propiedad? ¿Puede manejar comparaciones donde el orden de los niños no importa? Por favor dígame cómo lo usó para pruebas unitarias. – walrii

0

Me gusta mucho http://pugixml.org/

It:

  • es estable
  • es extremadamente rápido
  • tiene gran documentación y código de ejemplo
  • está licenciado bajo la licencia MIT
  • es muy amigable con STL
  • es todavía bastante un proyecto activo
  • tiene gran apoyo para XPath
+0

Corrígeme si me equivoco, pero parece ser solo otro analizador xml. ¿Qué tiene para las pruebas unitarias? Tiene operadores para comparar, pero recomienda que solo se utilicen para contenedores asociativos. – walrii

+0

Sí, tienes razón. Lo sentimos, no tiene las funciones específicas que buscas. – Homer6

+0

Darn. Esperaba haberme perdido algo :) – walrii

1

He utilizado una combinación de Xerces y cppunit de lograr esto en el pasado. En mis casos de prueba, crearía un objeto DOM con la API Xerces en la función setUp(). Este DOM representaría mis resultados esperados. En el caso de prueba en sí, leería el archivo XML y la clase bajo prueba llenaría un objeto DOM que representa el contenido del archivo. Para verificar la igualdad, recorría los dos árboles DOM a través de la API Xerces (DOMTreeWalker) y utilizaba las aserciones CPPUnit cuando comparaba el contenido de los nodos DOM. Fue un poco tedioso, pero no había marcos disponibles en ese momento que pudieran imitar a XmlUnit. Me imagino que Google Test funcionaría tan bien como CPPUnit para llevar a cabo esta tarea.

Los Xerces API tiene cierto apoyo a las expresiones XPath:

http://xerces.apache.org/xerces-c/faq-parse-3.html#faq-2

Para la validación se necesitaría para configurar un controlador de errores como se ha mencionado aquí, e incorporarlo en el caso de test:

Validating document in Xerces C++

Para la comprobación de transformación XSLT necesitaría usar Xalan. Funciona con Xerces para no anticipar las dificultades principales:

http://xalan.apache.org/old/xalan-c/index.html

yo no era capaz de localizar cualquier producto obvias que envasan operaciones XMLUnit-como en C++. Entonces la respuesta es: creo que tendrás que hacer tu propia. Buena suerte.

Cuestiones relacionadas