2010-09-15 7 views
17

मैं एक छोटी परियोजना पर जुनीट को कार्यान्वित करना चाहता हूं जिस पर मैं काम कर रहा हूं क्योंकि मैं इसके बारे में कुछ सीखना चाहता हूं।मैं जुनीट टेस्ट केस में फ़ाइलों की तुलना कैसे कर सकता हूं?

ट्यूटोरियल जो मैं पढ़ता हूं उन सभी तरीकों का संदर्भ देता है जिनमें एक विशेष आउटपुट होता है।

मेरे मामले में मेरा आउटपुट फाइलें हैं, मैं यह कैसे कर सकता हूं? कोई साधारण उदाहरण? कोई दृष्टिकोण जो मुझे इस में मदद कर सकता है?

फ़ाइलें कच्ची टेक्स्ट फाइलें हैं जो एक शून्य निजी विधि द्वारा बनाई गई हैं।

+0

कैसे तरीकों फाइल करने के लिए लिख सकता हूँ? अगर उन्हें एक स्ट्रीम मिलती है तो आप उन्हें केवल एक फ़ाइल के लिए इंगित कर सकते हैं और फिर इसकी तुलना कर सकते हैं। –

+0

वेब क्रॉलर के अंदर मूल लेखन बफर स्ट्रिंग के साथ (मैं एंटर दबाता हूं लेकिन यह संदेश लिखा है) कोड कुछ ऐसा है: txtUrlSpecial.write (bigText.charAt (j)); – Saikios

उत्तर

16

आप इनपुट के दिए गए सेट के लिए एक सही आउटपुट फ़ाइल प्राप्त करना चाहते हैं, और उन इनपुट के साथ अपनी शून्य विधि को कॉल करने के लिए एक परीक्षण सेट अप करना चाहते हैं, और फिर अपनी विधि द्वारा उत्पादित किए गए कार्यों के विरुद्ध अपनी मान्य आउटपुट फ़ाइल की तुलना करें। आपको यह सुनिश्चित करने की ज़रूरत है कि आपके पास यह निर्दिष्ट करने का कोई तरीका है कि आपकी विधि कहां से आउटपुट होगी, अन्यथा आपका परीक्षण बहुत भंगुर होगा।

@Rule 
public TemporaryFolder folder = new TemporaryFolder(); 

@Test 
public void testXYZ() { 
    final File expected = new File("xyz.txt"); 
    final File output = folder.newFile("xyz.txt"); 
    TestClass.xyz(output); 
    Assert.assertEquals(FileUtils.readLines(expected), FileUtils.readLines(output)); 
} 

परीक्षण रन से पहले आउटपुट फ़ाइल कभी नहीं मौजूद है सुनिश्चित करने के लिए convinience पाठ फ़ाइल तुलना & JUnit के TemporaryFolder के लिए उपयोग करता है कॉमन्स-कब FileUtils

+0

मुझे यह पसंद है, लेकिन क्यों कोई भी आपके उत्तर के लिए वोट नहीं देता? : एस – Saikios

+2

आप हमेशा इसके लिए खुद को वोट कर सकते हैं –

+0

ग्रहण कहता है कि org.junit.internal.runners.TestClass को बहिष्कृत किया गया है = ( – Saikios

2

अपनी विधियों के बाद फ़ाइल लिखने के बाद, यूनिट-टेस्ट में आप फ़ाइल को पढ़ सकते हैं और सत्यापित कर सकते हैं कि यह सही तरीके से लिखा गया है या नहीं।

एक और चीज जो समझ में आता है वह है कि आपकी विधियों को उस डेटा में पुनर्प्राप्त किया जाए जो उस डेटा को पुनर्प्राप्त करता है और इसे उन तरीकों से लौटाता है जो इसे केवल फ़ाइल में लिखते हैं। फिर आप सत्यापित कर सकते हैं कि पहली विधि द्वारा लौटाया गया डेटा ठीक है या नहीं।

और एक और व्यावहारिक दृष्टिकोण डेटा लिखने वाली विधि के लिए OutputStream पास करना होगा। "असली कोड" में आप FileOutputStream/FileWriter पास कर सकते हैं, जबकि परीक्षण-कोड में आप OutputStream का नकली कार्यान्वयन लिख सकते हैं और जांच सकते हैं कि इसमें क्या लिखा जा रहा है।

1

यदि आप आउटपुट को स्ट्रीम में रखने के लिए विधि को नियंत्रित नहीं कर सकते हैं, तो मैं कहूंगा कि आपको अपने कोड को दोबारा करने की आवश्यकता है ताकि विधि पैरामीटर (या इसकी कक्षा के निर्माता में) में स्ट्रीम प्राप्त करे। ।

उसके बाद, परीक्षण बहुत आसान है - आप बस स्ट्रीम की जांच कर सकते हैं। आसानी से टेस्ट करने योग्य कोड आमतौर पर अच्छा कोड बराबर होता है।

+0

समस्या यह है कि वास्तव में यह एक एकल फ़ाइल नहीं बनाता है, यह विभिन्न चीजों के आधार पर 3 और 5 फ़ाइलों के बीच बनाता है। लेकिन क्योंकि मैं वास्तव में जूनिट के साथ नोब हूं, मैं इसे पूरी तरह से समझने के लिए इसे एक फ़ाइल के साथ पहले कोशिश करना चाहता था। धन्यवाद = डी। – Saikios

+0

@Saikios यह किसी भी फाइल के लिए प्रासंगिक है :) –

1

हालांकि आपका प्रश्न सरल प्रतीत हो सकता है, यह इकाई परीक्षण के दिल पर हड़ताल करता है, किसी को परीक्षण करने योग्य कोड लिखने की आवश्यकता होती है। यही कारण है कि कुछ विशेषज्ञ सलाह देते हैं कि किसी को इकाई परीक्षण पहले और फिर कार्यान्वयन वर्ग लिखना चाहिए।

आपके मामले में मेरा सुझाव है कि आप अपनी विधि को निष्पादित करने और फ़ाइल (ओं) को बनाने की अनुमति दें, जिसके बाद आपका यूनिट परीक्षण विश्लेषण कर सकता है कि फाइलें सही तरीके से बनाई गई हैं।

+0

धन्यवाद, मुझे अगली बार इसे ध्यान में रखना होगा सबसे पहले मेरा यूनिट परीक्षण करें: डी – Saikios

+0

पूरी फ़ाइल लिखने वाले कोड का टुकड़ा शायद बहुत बड़ा और जटिल है। जुनीट दिखा सकता है कि कोड अभी भी काम करता है (कोई रिग्रेशन नहीं) और यह कुछ है। हालांकि वास्तव में अच्छा यूनिट परीक्षण भी ढूंढने में मदद करता है क्या टूटा हुआ है। – h22

3

junit-addons project से कक्षा का उपयोग करें। अन्य लिंक:

तरीकों में से एक:

assertEquals(java.lang.String message, 
      java.io.Reader expected, 
      java.io.Reader actual) 
+0

** संरक्षित ** स्थिर शून्य assertEquals (java.lang.String संदेश, java.io.Reader अपेक्षित, java.io.Reader वास्तविक) – user482745

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