2009-09-09 10 views
6

मुझे परीक्षण करने की लगातार आवश्यकता है कि एक्सएमएल फाइलें सही हैं और परीक्षण के एक तरीके की आवश्यकता है कि 2 एक्सएमएल स्ट्रिंग्स (या दस्तावेज) समान हैं, जैसे:क्या XML फ़ाइलों का परीक्षण करने के लिए कोई AssEEquals है?

XMLAssert.assertEquals(String xmlExpected, String xmlActual); 

इसके अलावा यह दिखाने के लिए उपयोगी होगा कि xml कहां है दस्तावेज़ अलग थे।

यह स्टैंडअलोन = "हां" (यानी डीटीडी या स्कीमा - यदि कोई है) के साथ दस्तावेज़ों तक सीमित होना चाहिए - महत्वपूर्ण नहीं है)। इसका मतलब है कि कोई डिफ़ॉल्ट मान नहीं है, और विशेषता प्रकार अप्रासंगिक हैं। निकट पाठ पीसीडीएटीए नोड्स सामान्यीकृत (समेकित) होना चाहिए।

ध्यान दें कि यह केवल लेक्सिकल तुलना

Assert.assertEquals(xmlExpected, xmlActual); 

द्वारा किया जा सकता है क्योंकि एक ही एक्सएमएल इंफोसेट को प्रस्तुत करने के अनिश्चित काल के कई तरीके हैं। तुलना तत्वों और विशेषताओं पर नामस्थानों का खाता लेनी चाहिए (लेकिन गुणों को विशेषता नहीं है - जो कि spec का हिस्सा नहीं हैं)।

ऐसा करने का एक तरीका दोनों दस्तावेज़ों को कैनोनिकल करना शामिल हो सकता है। वैकल्पिक रूप से एक XMLDiff का उपयोग किया जा सकता है।

मुझे कुछ भी नहीं मिला, इसलिए कुछ साल पहले मैंने खुद लिखा था।

[मुझे फ्लोटिंग पॉइंट मानों की तुलना करने की एक विशेष आवश्यकता भी है, हालांकि यह एक हैक होना चाहिए क्योंकि डेटा प्रकार के सीडीएटीए या पीसीडीएटीए का अनुमान लगाया जा सकता है और सवाल के तत्काल दायरे से बाहर है।]

नोट: शायद प्रत्येक भाषा के लिए एक विशिष्ट समाधान होने की आवश्यकता होगी। मैं जावा और सी #

में विशेष रूप से रूचि रखता हूं

उत्तर

5

जावा के लिए, आपको XMLUnit चेकआउट करना चाहिए। और मैंने अभी देखा है कि यह एक .NET संस्करण के साथ भी आता है! जावा संस्करण का नमूना यहां दिया गया है:

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

धन्यवाद। यह निश्चित रूप से व्यापक है जितना मैं चाहता था और मैंने जो लिखा उससे कहीं अधिक शक्तिशाली। यह एक दयालुता है जिसे मैंने 2 साल पहले नहीं खोजा था –

1

में दिलचस्पी है, आप ऐसा करने के लिए XmlDiffPatch.dll का उपयोग करने का प्रयास कर सकते हैं। http://msdn.microsoft.com/en-us/xml/bb190622.aspx पर जाएं, "एक्सएमएल डिफ और पैच" डाउनलोड करें, और अपनी परियोजना में डीएलएल का संदर्भ जोड़ें। मैंने इसे वास्तविक कोड में कभी भी उपयोग नहीं किया है, लेकिन आप XmlDiff.Exe टूल को आजमा सकते हैं जो यह देखने के लिए बंडल आता है कि यह आपकी आवश्यकताओं के अनुरूप है या नहीं।

संबंधित मुद्दे

 संबंधित मुद्दे