2013-03-02 8 views
5

मैं कुछ विरासत कोड के साथ काम कर रहा हूं जिसमें कुछ System.out.print कमांड हैं। मेरा ईकोबर्टुरा प्लगइन इस लाइन को लाल दिखाता है, इसलिए मैं उन्हें यूनिट परीक्षण करना चाहता हूं।क्या हमें यूनिट परीक्षण कंसोल आउटपुट चाहिए?

Here स्टैक ओवरफ्लो में मुझे यूनिट टेस्ट कंसोल आउटपुट का एक तरीका मिला जो मुझे बहुत दिलचस्प है।

इस तरह मैं यह कर:

 private final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); 

     @Before 
     public void setUpStreams() { 
      System.setOut(new PrintStream(outContent)); 
     } 

     @After 
     public void cleanUpStreams() { 
      System.setOut(null); 
     } 

     @Test 
     public void out() { 
      System.out.print("Some message from the system"); 
      assertEquals("Some message from the system", outContent.toString()); 
     } 

अब तक तो अच्छा, परीक्षण हरी चला जाता है लेकिन जब मैं फिर से प्लगइन कोड कवरेज चलाने के लिए, मैं यह संदेश प्राप्त:

अपवाद में सूत्र "थ्रेड-0" net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData (TouchCollector.java:186) net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData पर (ProjectData.java पर java.lang.NullPointerException: 267) net.sourceforge.cobertura.coveragedata.SaveTimer.run (SaveTimer.java:31 पर ) java.lang.Thread.run पर (Thread.java:662)

मैं कुछ संदेह है:

  • क्या यूनिट परीक्षण System.out.print()'s इकाई परीक्षण करने का प्रयास करना सही है?
  • क्या ईकोबर्टूरैन इस प्रकार के परीक्षण के साथ संगत है?
  • यदि ईकोबर्टुरा इस प्रकार के परीक्षण के साथ संगत नहीं है, तो यह लाल रेखा क्यों दिखाता है?
  • क्या मेरे परीक्षण में कुछ गड़बड़ है?
  • मैं जुनीट 4.11 का उपयोग कर रहा हूं क्या आपको लगता है कि इसके साथ कुछ करने के लिए कुछ है?
  • ईकोबर्टुरा मुझे यह त्रुटि क्यों दे रहा है?

उत्तर

6

यह इकाई परीक्षण System.out.print() के लिए प्रयास करने के लिए सही है?

यह अत्यधिक निर्भर करता है कि आप परीक्षण करने का प्रयास कर रहे हैं। मुझे नहीं लगता कि System.out.print() को स्वयं जांचना जरूरी है, मुझे उम्मीद है कि सूर्य/ओरेकल ने यह काफी किया है। लेकिन यदि आपका एप्लिकेशन कंसोल पर महत्वपूर्ण जानकारी आउटपुट करता है और यह आउटपुट को सत्यापित करने का आपका एकमात्र तरीका है, हां से, आपको इसका परीक्षण करने की आवश्यकता है। यदि आप संबंधित कक्षाओं का परीक्षण करके अपने कोड का परीक्षण कर सकते हैं, तो आपको शायद आउटपुट स्ट्रीम का परीक्षण करने की आवश्यकता नहीं है।

डेटाबेस देखें, उदाहरण के लिए: मैं जेडीबीसी चालक का स्वयं परीक्षण नहीं करता हूं, लेकिन मैं सभी कोड/कार्यक्षमता का परीक्षण करता हूं जो डाटाबेस से डेटा को लोड/सहेजने का हिस्सा है।

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

अपने नल पॉइंटर एक्सेप्शन का सवाल है

System.setOut(null); को आपका कॉल शून्य पर System.out की स्थापना की और eCobertura शायद मानक आउट को कुछ लिखने की कोशिश करता है, जो अब शून्य है। आप कोड stdout

eCobertura असंगत है उपयोग करने के लिए परीक्षण के इस प्रकार के साथ इस प्रकार है कि अनुमति देने के लिए अपने @Before विधि में स्ट्रीम बाहर orignial बचाने के लिए और हमारे @After विधि में बहाल करने की आवश्यकता हो सकती?

यदि ईकोबर्टुरा इस प्रकार के परीक्षण के साथ संगत नहीं है, तो यह लाल रेखा क्यों दिखाता है?

ईकोबर्टुरा मुझे यह त्रुटि क्यों दे रहा है?

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

क्या कुछ है मेरे परीक्षण में गलत है?

यह सुनिश्चित करना आवश्यक हो सकता है कि स्टडऑट सही ढंग से बहाल हो।

मैं जुनीट 4.11 का उपयोग कर रहा हूं क्या आपको लगता है कि इसके साथ कुछ करने के लिए कुछ है?

नहीं है, मुझे नहीं लगता कि इतना

+0

का उल्लेख करने के लिए – sfrj

+1

धन्यवाद। मुझे खुशी है कि मैं मदद कर सकता हूं। – phisch

3

यदि आपके कोड में System.out.println का उपयोग करना सही है, तो यह सही है (इकाई/एकीकरण) परीक्षण करें।

इस तरह के कोड का परीक्षण करने के लिए सिस्टम नियम नामक एक उपयोगी सिस्टम परीक्षण उपयोगिता है।

http://stefanbirkner.github.com/system-rules/

+0

मुझे लगता है कि सुझाव की सराहना करते हैं। लेकिन मुझे यह सुनिश्चित करने में भी दिलचस्पी है कि 'ईकोबर्टुरा' मुझे बताता है कि रेखा ढकी हुई है। उस अपवाद को क्यों निकाल दिया जा रहा है? फ्रेमवर्क – sfrj

+0

+1 यह एक बहुत अच्छा जवाब था, मैं सभी बिंदुओं से सहमत हूं। +1 – sfrj

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