मेरे पास एक कक्षा है जो वस्तुओं के एक सेट को क्रमबद्ध करती है (एक्सएमएल क्रमबद्धता का उपयोग करके) कि मैं इकाई परीक्षण करना चाहता हूं।क्या कोई इकाई यूनिट परीक्षण क्रमबद्धता है?
मेरी समस्या यह है कि ऐसा लगता है कि मैं कुछ भी उपयोगी के बजाय एक्सएमएल क्रमबद्धता के .NET कार्यान्वयन का परीक्षण करूँगा। मेरे पास थोड़ा सा चिकन और अंडा परिदृश्य भी है जहां रीडर का परीक्षण करने के लिए, मुझे ऐसा करने के लिए लेखक द्वारा उत्पादित एक फ़ाइल की आवश्यकता होगी।
मुझे लगता है कि सवाल (वहाँ 3 लेकिन वे सभी संबंधित) मैं अंततः पर प्रतिक्रिया के लिए देख रहा हूँ कर रहे हैं:
- यह रीडर का उपयोग किए बिना लेखक परीक्षण करने के लिए, संभव है?
- पाठक (एक्सएमएल फ़ाइल? रिकॉर्ड/प्लेबैक के साथ मॉकिंग) का परीक्षण करने के लिए सबसे अच्छी रणनीति क्या है? क्या यह मामला है कि आप वास्तव में क्या कर रहे हैं उन वस्तुओं के संपत्ति मूल्यों का परीक्षण करना जो deserialized किया गया है?
- लेखक का परीक्षण करने के लिए सबसे अच्छी रणनीति क्या है! Xml क्रमबद्धता पर
पृष्ठभूमि की जानकारी
मैं एक स्कीमा का उपयोग नहीं कर रही है, इसलिए सभी XML तत्वों और विशेषताओं वस्तुओं 'गुण से मेल खाते हैं। चूंकि कोई स्कीमा नहीं है, टैग/विशेषताएँ जो प्रत्येक ऑब्जेक्ट के गुणों में पाए गए मेल नहीं खाते हैं, को XmlSerializer द्वारा अनदेखा किया जाता है (इसलिए संपत्ति का मान शून्य या डिफ़ॉल्ट है)। यहाँ
public class MyObject
{
public string Name { get;set; }
public int Age { get;set; }
[XmlAttribute]
public int Height { get;set; }
}
और वीजा प्रतिकूल करने के लिए नक्शे होगा एक उदाहरण
<MyObject Height="300">
<Name>Bob</Name>
<Age>20</Age>
<MyObject>
है। यदि ऑब्जेक्ट नीचे एक्सएमएल में बदल गया है तो सफलतापूर्वक deserialize होगा, लेकिन फर्स्टनाम खाली हो जाएगा।
public class MyObject
{
public string FirstName { get;set; }
public int Age { get;set; }
[XmlAttribute]
public int Height { get;set; }
}
एक अमान्य XML फ़ाइल सही तरीके deserialize होता है, इसलिए इकाई परीक्षण से होकर गुजरेगा जब तक आप MyObject के मूल्यों पर दावे भाग गया।
मूल रूप से यह एक स्कीमा था, और पढ़ना + लेखन मेरी अपनी कक्षा द्वारा किया गया था जिसने ऑब्जेक्ट ग्राफ़ लिखा था। मैं तब (1 साल बाद!) पता चला कि सभी काम XmlSerializer द्वारा किया जा सकता था। पिछड़े संगतता के संदर्भ में, मैं कहूंगा कि एक्सएमएल असेंबली संस्करण से जुड़ा होगा जो इसे लिखा गया था। इसलिए यदि आपने असेंबली का नवीनतम संस्करण पिछले संस्करणों द्वारा उत्पादित कुछ एक्सएमएल दिया है, तो संभावना है कि ऑब्जेक्ट मॉडल बदल गया है, इसलिए यह अब मेल नहीं खाता है। मुझे यकीन नहीं है कि इसके लिए कभी भी ऐसा होगा, लेकिन मैं नहीं देख सकता कि कैसे (cont'd) –
आप पुराने प्रारूप (जैसा कि जॉन उल्लेख करता है) को बिना किसी क्रमबद्ध करना होगा और इसे हमेशा मैन्युअल रूप से निष्पादित करना होगा एक एक्सएमएल रीडर? –
XmlSerializer बिना किसी त्रुटि के अप्रत्याशित डेटा छोड़ देता है, या आप '[XmlAny *] 'का उपयोग कर सकते हैं - इसलिए किसी ऑब्जेक्ट को आंशिक रूप से * deserialize करने के तरीके हैं (और" किसी भी "प्रोप से अन्य डेटा प्राप्त करें)। –