2011-05-18 7 views
5

एक परीक्षण लिखना मैं परीक्षण आउटपुट को कुछ आउटपुट लौटने की उम्मीद करता हूं। आमतौर पर मैं यह जांच रहा हूं कि किसी दिए गए डेटाबेस ऑपरेशन के लिए मुझे एक निश्चित आउटपुट मिलता है। मेरा अभ्यास आमतौर पर टेस्ट में त्वरित मानचित्र/गुण फ़ाइल के रूप में एक सरणी लिखने का होता है। यह समाधान त्वरित है, और अपेक्षित परिणामों को लोड करने के लिए बाहरी फ़ाइल के रन-टाइम परिवर्तनों के लिए कमजोर नहीं है।परीक्षण के अपेक्षित आउटपुट को कहां स्टोर किया जाए?

एक समाधान जावा स्रोत फ़ाइल में डेटा रखना है, इसलिए मैं परीक्षण को कम करता हूं और अभी भी एक संकलन-समय जांच परीक्षण प्राप्त करता हूं। इस बारे में कैसा है?

या loading the exepected results as resources एक बेहतर दृष्टिकोण है? ए .properties फ़ाइल पर्याप्त नहीं है क्योंकि मेरे पास प्रति कुंजी केवल एक मान हो सकता है। commons-config जाने का रास्ता है?

मैं, एक सरल उपाय है जहाँ मैं कुंजी प्रति गुण नाम पसंद करते हैं तो प्रत्येक प्रविष्टि के लिए मैं एक doc-length और numFound संपत्ति के मूल्य (एक xml नोड के तत्वों की तरह लगता है) हो सकता है चाहते हैं?

आप इस बारे में कैसे जाते हैं?

+0

दिलचस्प सवाल! हमारे द्वारा यहां किए गए सभी परीक्षण स्थिर डेटा के साथ हैं। उस स्थिति में आपके परीक्षण कोड में परिभाषित अपेक्षित परिणाम ठीक काम करते हैं। यह जानना चाहूंगा! – cheekoo

+0

+1 | टिप्पणी: एक कुंजी के पास एक मान हो सकता है लेकिन मान कोमा – VirtualTroll

उत्तर

2

हां, अपेक्षित परिणामों के संसाधनों का उपयोग करके (और डेटा सेट भी) अच्छी तरह से काम करता है और यह काफी आम है।

एक्सएमएल आपके लिए एक उपयोगी प्रारूप भी हो सकता है - पदानुक्रमित होने से निश्चित रूप से मदद मिल सकती है (परीक्षण प्रति एक तत्व)। यह सटीक स्थिति पर निर्भर करता है, लेकिन यह निश्चित रूप से एक विकल्प है। वैकल्पिक रूप से, जेएसओएन आपके लिए आसान हो सकता है। धारावाहिक API के संदर्भ में आप क्या सहज हैं?

+0

द्वारा अलग किए गए कई मानों का प्रतिनिधित्व कर सकते हैं "धारावाहिक API के संदर्भ में आप क्या सहज हैं?" कोई भी? मेरे पास एक्सएमएल और सीएसवी पहले (JSON केवल जेएस) पार्स किया गया है, लेकिन वे हैं हर बार मैं देखता हूं (~ दुर्लभ) .. संदर्भ के लिए आप कुछ उदाहरण कोड कैसे पोस्ट करते हैं? – simpatico

+0

@simpatico: यह जानना मुश्किल है कि क्या आवश्यक है, और स्पष्ट रूप से मैं जावा एक्सएमएल एपीआई में वापस नहीं आना चाहता हूं जब तक कि मुझे यह नहीं करना चाहिए :(निश्चित रूप से अंतर्निहित XML एपीआई के बजाय जेडॉम की तरह कुछ देखें। –

+0

वहां आप जाते हैं, एक्सएमएल पार्सिंग एक सीधा समाधान नहीं है! – simpatico

2

को देखते हुए क्या आप आम तौर पर परीक्षण कर रहे हैं कि एक निश्चित डीबी आपरेशन रिटर्न की उम्मीद उत्पादन, आप DBUnit का उपयोग कर पर एक नज़र लेने के लिए चाहते हो सकता है उल्लेख है कि:

// Load expected data from an XML dataset 
    IDataSet expectedDataSet = new FlatXmlDataSetBuilder().build(new File("expectedDataSet.xml")); 
    ITable expectedTable = expectedDataSet.getTable("TABLE_NAME"); 

    // Assert actual database table match expected table 
    Assertion.assertEquals(expectedTable, actualTable); 

DBUnit कुछ ऑपरेशन के बाद एक मेज के राज्य की तुलना संभालती पूरा कर चुका है और जोर दे रहा है कि तालिका में डेटा अपेक्षित DataSet से मेल खाता है। DataSet के लिए सबसे आम प्रारूप है कि आप वास्तविक तालिका स्थिति की तुलना में शायद XmlDataSet का उपयोग कर रहे हैं, जहां अपेक्षित डेटा किसी XML फ़ाइल से लोड किया गया है, लेकिन अन्य उप-वर्ग भी हैं।

यदि आप पहले से ही इस तरह के परीक्षण कर रहे हैं, तो ऐसा लगता है कि आपने पहले से ही उसी तर्क को लिखा होगा - लेकिन डीबीयूनीट आपको अतिरिक्त सुविधाएं दे सकता है जिन्हें आपने अभी तक अपने आप पर लागू नहीं किया है।

+0

@matt: "कोड के साथ इसे साबित करें" के बारे में सुना? – simpatico

+0

उह - साबित करें कि यह पुस्तकालय किसी के लिए उपयोगी हो सकता है या इसका उपयोग कैसे किया जाए? डीबीयूनीट का लिंक प्रारंभ पृष्ठ , मेरे उत्तर में, ऐसा करने का इरादा है। मैं उम्मीद नहीं कर सकता कि परियोजना के दस्तावेज में जो दिखाई देता है उससे डीबीयूनीट का उपयोग कैसे करें। –

+0

@matt - और यदि मैं एक डीबी (जैसे अब) का परीक्षण नहीं कर रहा हूं? एम testi एनजी एक सर्वलेट (जिसमें बीटीडब्लू के पास एक इंडेक्स/डीबी है) और यह जांचने के लिए कि मुझे दिए गए प्रश्नों के लिए मुझे अपेक्षित परिणाम मिलते हैं? – simpatico

3

आपको ऐसे परीक्षणों को बनाए रखने के बारे में याद रखना चाहिए। स्प्रिंग-डब्ल्यूएस परीक्षण समर्थन के साथ कई वेब सेवाओं के परीक्षण लिखने के बाद मुझे यह स्वीकार करना होगा कि भंडारण अनुरोध (परीक्षण सेटअप) और बाहरी एक्सएमएल फाइलों में अपेक्षित प्रतिक्रियाएं इतनी अच्छी विचार नहीं थीं। प्रत्येक अनुरोध-प्रतिक्रिया जोड़ी के पास टेस्ट केस के समान उपसर्ग था, इसलिए सब कुछ स्वचालित और बहुत साफ था। लेकिन अभी भी परीक्षण विफलताओं का पुनर्विक्रय और निदान दर्दनाक हो जाता है। थोड़ी देर के बाद मुझे एहसास हुआ कि परीक्षण मामले में एक्सएमएल को स्ट्रिंग के रूप में एम्बेड करना, हालांकि बदसूरत, बनाए रखना बहुत आसान है।

आपके मामले में, मुझे लगता है कि आप कुछ डेटाबेस क्वेरी का आह्वान करते हैं और आपको प्रतिक्रिया में नक्शे की एक सूची मिलती है। इन संरचनाओं पर दावा करने के लिए कुछ अच्छे डीएसएल लिखने के बारे में क्या? असल में, FEST-Assert इसके लिए काफी अच्छा है।

List<Map<String, Object>> rs = db.query("SELECT id, name FROM Users"); 

तो आप बस लिख सकते हैं::

assertThat(rs).hasSize(1); 
assertThat(rs.get(0)) 
    .hasSize(2) 
    .includes(
    entry("id", 7), 
    entry("name", "John") 
) 
); 
बेशक

यह और आगे फिट करने के लिए सरल बनाया जाना चाहिए कर सकते हैं

के आप निम्न क्वेरी का परीक्षण कहना (मैं जानता हूँ कि यह एक अति सरलीकरण है) करते हैं आपकी जरूरतें बेहतर हैं। एक फ़ाइल से दूसरे फ़ाइल में कूदने के बजाय एक स्क्रीन पर एक पूर्ण परीक्षण परिदृश्य रखना आसान नहीं है?

या शायद आपको Fitnesse (ऐसा लगता है कि आप अब यूनिट परीक्षण नहीं कर रहे हैं, इसलिए स्वीकृति परीक्षण ढांचा ठीक होना चाहिए), जहां तालिकाएं सहित विकी-जैसे दस्तावेज़ों में परीक्षण संग्रहीत किए जाते हैं?

+2

मुझे सटीक विपरीत मिला है - मुझे परीक्षण के लिए डेटा को देखना आसान लगता है जब यह एक स्ट्रिंग में * नहीं * होता है, जो या तो कॉन्सटेनेशन क्रॉफ्ट करने वाला होता है या सभी एक पंक्ति पर हो सकता है, और हो सकता है भी भागने की आवश्यकता है। इसके अतिरिक्त, जब आप अलग-अलग फ़ाइलों का उपयोग करते हैं तो यह जांचने के लिए अन्य टूल प्राप्त करना आसान होता है कि वे फ़ाइलें मान्य हैं - आप अमान्य XML स्ट्रिंग का पीछा नहीं करते हैं। –

+0

मैं इस पर जॉन के साथ हूँ।इसके अतिरिक्त, जब भी आप डेटा बदलना चाहते हैं, तो स्रोत कोड में एम्बेडेड परीक्षण डेटा को एक पुन: संकलित करने की आवश्यकता होती है। –

+0

यह क्यू का क्रूक्स है! मेरे पास एक सीएसवी में डेटा था और फिर लंबे समय के बाद परीक्षण में वापस आ रहा था (स्पष्ट रूप से मैं-डस्किपटेस्ट का उपयोग कर रहा था) मुझे यह समझने में उम्र लग गई कि परीक्षण वास्तव में सही था लेकिन समस्या यह थी कि मैंने अकसर संशोधित किया था परीक्षण .. इसके बाद मैंने कोड में सभी सीएसवी रखा और वह जार हमेशा काम करता है, लेकिन कक्षा अब फूला हुआ है, और संपादक लाइन रैपिंग के साथ नेविगेट करने में बहुत धीमी हो जाती है। – simpatico

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