2009-02-05 5 views
8

Qualcuno sa se esiste qualcosa come XMLUnit per C++? Sto cercando un modo semplice per verificare nodi, valori, ecc in un output XML. Stiamo utilizzando Google test in Visual Studio, ma suppongo che qualsiasi libreria che faciliti il ​​lavoro sarà sufficiente.XMLUnit per C++

Sto usando Xerces come parser XML ma XMLUnit (http://xmlunit.sourceforge.net/) ha alcune funzionalità del parser XML che sono molto utili per il test delle unità. Ad esempio, afferma utilizzando espressioni XPath, funzioni per confrontare due XMLs "simili", ecc

+0

Quando dici "assegni" ... Cosa intendi? Ho una mia classe Template STL per trattare con XML che funziona molto bene, ed è molto stretta, molto efficiente. Mi permette di leggere i nodi, controllare i bambini, ottenere il testo dei nodi, insieme a tutte le proprietà ... E controlla che l'XML sia valido, durante il runtime, su XML Open, ecc. Stai cercando un XML Lib che confronterà due file XML per vedere se sono veramente uguali tra loro, anche se i tag sono formattati in modo leggermente diverso? – LarryF

+0

Sì ... Questo può essere un alto ordine. Ma sto lavorando ad un altro progetto che viene usato per confrontare due "stringhe" per vedere quanto siano simili. Con la mia classe XML, potrebbe leggere due file e confrontare due nodi e darti un'idea di quanto siano strettamente "correlati" ... (Il testo, non i tag, ma ..) – LarryF

risposta

-1

È possibile utilizzare TinyXML pacchetto qui: tinyxml

sto lavorando con lui ed è molto cordiale e privo di bug.

È una gestione xml. Suppongo che non sia stato progettato per il test dell'unità, ma puoi usarlo per controllare/testare i tuoi file xml. Come previsto, carica l'xml in un oggetto DOM e fornisce una bella API da eseguire sui nodi.

Gal

-1

Xerces a http://xerces.apache.org/xerces-c/ ho praticamente full optional, ha un'interfaccia C++ e produce buoni messaggi di errore, che molti altri parser XML non fanno così bene. Detto questo, è piuttosto grande & Ho finito con il mio wrapper attorno al parser C Expat.

-1

Attualmente sto usando libxml ++ per un mio progetto personale.

-1

Uso Boost property_tree per xml, facile da usare, abbastanza robusto e funziona bene con il framework di test dell'unità Boost.

+0

Posso vedere come metti xml dentro e fuori da un albero delle proprietà, ma non vedo alcuna funzionalità per il test dell'unità. C'è un modo per confrontare gli alberi di proprietà? Può gestire confronti in cui l'ordine dei figli non ha importanza? Per favore dimmi come l'hai usato per i test unitari. – walrii

0

mi piace molto http://pugixml.org/

E:

  • è stabile
  • è estremamente veloce
  • ha ottima documentazione e codice di esempio
  • è concesso in licenza sotto la licenza MIT
  • è molto STL friendly
  • è ancora un progetto molto attivo
  • ha grande supporto per XPath
+0

Correggetemi se ho torto, ma sembra solo un altro parser xml. Che cosa ha per il test unitario? Ha operatori per il confronto, ma raccomanda che vengano utilizzati solo per contenitori associativi. – walrii

+0

Sì, hai ragione. Siamo spiacenti, non ha le caratteristiche specifiche che stai cercando. – Homer6

+0

Darn. Speravo di aver perso qualcosa :) – walrii

1

Ho usato una combinazione di Xerces e CppUnit per raggiungere questo obiettivo in passato. Nei miei casi di test vorrei creare un oggetto DOM con l'API Xerces nella funzione setUp(). Questo DOM rappresenterebbe i miei risultati attesi. Nel caso di test stesso, leggerei il file XML e la classe sottoposta a test popolerebbe un oggetto DOM che rappresenta il contenuto del file. Per controllare l'uguaglianza, vorrei passare attraverso i due alberi DOM tramite l'API Xerces (DOMTreeWalker) e utilizzare le asserzioni CPPUnit mentre confrontavo il contenuto dei nodi DOM. È stato un po 'noioso, ma al momento non c'erano framework disponibili che potessero imitare XmlUnit. Immagino che Google Test funzioni altrettanto bene di CPPUnit per realizzare questo compito.

I Xerces API ha qualche supporto per le espressioni XPath:

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

Per la convalida si avrebbe bisogno di configurare un gestore degli errori come detto qui e incorporarlo in un banco di prova:

Validating document in Xerces C++

Per il controllo della trasformazione XSLT è necessario utilizzare Xalan. Funziona con Xerces quindi non anticipare eventuali difficoltà rilevanti:

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

non era in grado di individuare eventuali prodotti evidenti che confezionati operazioni XMLUnit-come in C++. Quindi la risposta è che penso che dovrai far girare il tuo. In bocca al lupo.