2009-09-09 18 views
6

mam częstej konieczności badania, że ​​pliki XML są prawidłowe i potrzeba sposób testowania że 2 ciągi XML (lub dokumenty) są identyczne, takie jak:Czy istnieje AssertEquals do testowania plików XML?

XMLAssert.assertEquals(String xmlExpected, String xmlActual); 

Ponadto wskazane byłoby, aby pokazać, gdzie Dokumenty XML różniły się.

ten powinien być ograniczony do dokumentów z standalone = „yes” (tj DTD lub schematu - jeśli w ogóle - nie ma znaczenia). Oznacza to, że nie ma wartości domyślnych, a typy atrybutów są nieistotne. Sąsiednie tekstowe węzły PCDATA powinny być znormalizowane (konkatenowane).

Należy pamiętać, że nie można tego zrobić po prostu przez leksykalnego porównaniu

Assert.assertEquals(xmlExpected, xmlActual); 

jak istnieją w nieskończoność wiele sposobów uczynienia tego samego zbioru informacji XML. Porównanie powinno uwzględniać przestrzenie nazw elementów i atrybutów (ale nie wartości atrybutów - które nie są częścią specyfikacji).

Jednym ze sposobów, aby to zrobić, może być kanonizacja obu dokumentów. Alternatywnie można użyć XMLDiff.

Nie mogłem znaleźć niczego, więc napisałem własną parę lat temu.

[Mam też szczególną potrzebę porównywania zmiennoprzecinkowych chociaż musi to być hack od typu danych CDATA lub PCDATA można się tylko domyślać i jest poza bezpośrednim zakresem na pytanie.]

UWAGA: Prawdopodobnie konieczne będzie konkretne rozwiązanie dla każdego języka. Jestem szczególnie zainteresowany Java i C#

Odpowiedz

5

W przypadku Java należy wypłatę XMLUnit. I właśnie zauważyłem, że jest dostarczany z wersją .NET też! Oto przykładowa wersja Java:

String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>"; 
String myTestXML = "<msg><localId>2376</localId></msg>"; 
assertXMLNotEqual(myControlXML, myTestXML); 
+0

Dzięki. Jest to z pewnością tak wszechstronne, jak chciałem, i nieco mocniejsze niż to, co napisałem. Szkoda, że ​​nie odkryłem tego 2 lata temu –

1

Można spróbować użyć XmlDiffPatch.dll to zrobić. Przejdź do http://msdn.microsoft.com/en-us/xml/bb190622.aspx, pobierz "XML Diff and Patch" i dodaj odniesienie do biblioteki DLL w swoim projekcie. Nigdy nie użyłem go w aktualnym kodzie, ale możesz wypróbować narzędzie XmlDiff.Exe, które jest dostarczane w pakiecie, aby sprawdzić, czy pasuje do Twoich potrzeb.

Powiązane problemy