2008-11-09 11 views
9

Mam mnóstwo testów jednostkowych, które muszą sprawdzić wyjścia XML.Najlepszy sposób porównywania 2 dokumentów XML w .NET

Rozpocząłem porównywanie łańcuchów, ale nie będzie to skalowalne, ponieważ przeszkadzają formatowanie i powierzchowne różnice.

Jaki jest najłatwiejszy sposób w .NET do oceny, czy wygenerowany kod XML jest semantycznie taki sam, jak oczekuje test?

Zamknięto jako duplikat How would you compare two XML Documents?

+0

To samo pytanie [tutaj] (http://stackoverflow.com/questions/167946/how-would-you-compare- dwa-xml-documents). –

Odpowiedz

11

Microsoft oferuje swoje narzędzia XML Diff/klas here. Ja osobiście nie zostały wykorzystane, ale to brzmi jak to będzie Ci zacząć:

„za pomocą klasy XMLDiff The programista jest w stanie określić, czy dwa pliki są w rzeczywistości różni się w oparciu na warunkach, które są ważne do ich stosowania”

wydaje się, aby poradzić sobie z różnymi zamawiającego, odstępy, przedrostków przestrzeni nazw itp

5

jest to jeden z tych problemów, które brzmi jak to będzie łatwe do zacząć w ith, ale im więcej kopiesz, tym więcej znajdziesz w przestrzeni problemowej.

Istnieje wiele wcześniej istniejących narzędzi, które będą robić różnice xml - zarówno w stylu GUI (podobnie jak w tekstowych narzędziach różnicowych), jak i w wierszu poleceń/komponentach (które są bardziej tym, co " d być po). XMLDiff jest jednym z takich przypadków, jak już wspomniano.

Kłopoty zaczynają się, gdy zadajesz pytania typu: co mam zrobić? Czy potrzebujesz kodu powrotu, który mówi, czy są one takie same czy różne (dla celów testów jednostkowych może to być wystarczające) - czy chcesz raportu, który mówi Ci, jakie są różnice? (może być również przydatny w testach jednostkowych, jeśli chcesz znaleźć przyczynę problemu)? Jeśli to drugie, jak chcesz te informacje? Czy chcesz edytować odległość? Czy chcesz interpretować wartości numeryczne i odróżniać je od siebie?

Co z zamawianiem węzłów? Czy węzły potomne powinny znajdować się w określonej kolejności - czy też są to te same węzły, ale w innej kolejności jest to w porządku?

Prawdopodobnie będziesz także chciał móc określić, co porównać. Czy przestrzenie nazw powinny się zgadzać? Czy białe spacje są znaczące w dowolnym miejscu? Czy istnieją pewne węzły, które zawsze chcesz ignorować (np. Atrybut "czasu"), czy chcesz dokładniej kontrolować dokładnie, które węzły są porównywane, a które nie?

Aby porównać wartości liczbowe, należy uwzględnić tolerancje? W przypadku porównań tekstowych (węzły tekstowe), czy biały tekst jest znaczący w numerze w numerze? A co z wielką literą?

I możesz iść dalej (jak to zrobiłem w analizie dla takiego projektu, w którym ostatnio pracuję).

Każde narzędzie rozwiązuje te problemy w różnym stopniu i na różne sposoby.

Być może zdecydujesz się po prostu zachować to tak proste, jak to tylko możliwe i pójść na coś, co ma bezpośredni, węzeł po węźle, porównanie, bez interpretacji - i na końcu powiedzieć, czy są one takie same lub różne. Wierzę, że xmldiff da ci to (i trochę więcej).

Warto również pomyśleć o tym, że jeśli chcesz zajmować się przypadkami, takimi jak różne zamówienia węzłów lub ignorowanie niektórych gałęzi, możesz zastosować transformację xslt do dokumentu testowego przed porównaniem, aby znormalizować go zgodnie z własnymi regułami.

Powiązane problemy