2013-04-10 8 views
25

मैं इस तरह कुछ परीक्षण किया है:कैसे मुद्रित करने के लिए JUnit बनाने का दावा है और परिणाम

@Test 
public void test01() 
{ 
    Position p = getPositionAt('a', 1); 
    assertNotNull("a1 exists", p); 
    assertNotNull("figure exists a1", p.getFigure()); 

    p = getPositionAt('a', 2); 
    assertNotNull("exists a2", p); 
    assertNull("figure exists a2", p.getFigure()); 

    p = getPositionAt('b', 1); 
    assertNotNull("exists b1", p); 
    assertNull("figure exists b1", p.getFigure()); 
} 

मैं क्या जरूरत है, जबकि परीक्षण चलाने के लिए stdout प्रत्येक ज़ोर संदेश मुद्रित करने के लिए और फिर ज़ोर का परिणाम है।

a1 exists -success 
figure exists a1 -success 
exists a2 -success 
figure exists a2 -succcess 
exists b1 -succcess 
figure exists b1 -failed 

लेकिन यह कैसे ऐसा करने के लिए:

यह परीक्षण वर्ग से प्रारूप की आवश्यकता है? मैं जुनीट के साथ काफी नया काम कर रहा हूं और मुझे कोई जानकारी नहीं है। runners और suites का उपयोग कर कोई तरीका है? या assertSuccess(), assertFailed() विधियों मौजूद हैं? किसी भी संकेत के लिए धन्यवाद।

+0

वैसे,' message' पैरामीटर लागू है "A1 मौजूद नहीं है "आदि ... – Jonathan

+5

कोई विशेष कारण यह है कि आप इसे क्यों चाहते हैं? –

+1

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

उत्तर

18

सबसे पहले, आप दो है मुद्दों को एक नहीं। जब कोई दावा विफल रहता है, तो AssertionError अपवाद फेंक दिया जाता है। यह इस बिंदु से पहले किसी भी दावे की जांच से रोकता है। इसे संबोधित करने के लिए आपको ErrorCollector का उपयोग करने की आवश्यकता है।

दूसरा, मुझे विश्वास नहीं है कि ऐसा करने के लिए जुनीट में कोई भी तरीका बनाया गया है। हालांकि, आप अपने खुद के तरीकों को लागू कर सकता है कि दावे लपेट: जब अभिकथन, विफल रहता है तो अपने `assertNotNull` संदेश वास्तव में होना चाहिए

public static void assertNotNull(String description, Object object){ 
    try{ 
      assertNotNull(description, object); 
      System.out.println(description + " - passed"); 
    }catch(AssertionError e){ 
      System.out.println(description + " - failed"); 

     throw e; 
    } 
} 
+2

फ़ंक्शन के भीतर assertNotNull नहीं होना चाहिए TestCase.assertNotNull? – IHeartAndroid

2

एक अंतिम उपाय के विकल्प प्रत्येक, एक इसी System.out.println साथ जोर हालांकि स्पष्ट रूप से है कि आदर्श से कम है जोड़ी बनाने में है। फिर भी, अगर यह सब विफल हो जाता है तो यह समस्या का समाधान करेगा।

assertNotNull("exists a2", p); // prints "exists a2" if p is null

सफलता पर एक संदेश मुद्रण में कोई विशेष मूल्य नहीं है:

10

सभी assertXXX तरीकों एक रूप है कि त्रुटि पर एक स्ट्रिंग प्रदर्शित करने के लिए अनुमति देता है।

संपादित

JUnit आम तौर पर एक ज़ोर के 2 रूपों प्रदान करता है। ऊपर के उदाहरण का पालन करने के लिए, आप 2 में से 1 मायनों में एक शून्य मान के लिए परीक्षण कर सकते हैं:

assertNotNull(p)

या

assertNotNull("my message on failure", p)

ढांचे कोई अन्य प्रयास की आवश्यकता के त्रुटि संदेश प्रिंट होगा आपके द्वारा (यह ढांचे द्वारा प्रदान किया जाता है)।

अपवाद आप निम्नलिखित पैटर्न का प्रयोग करेंगे के लिए परीक्षण करने के लिए:

try{ 
    someCall(); 
catch(Exception e){ 
    fail(): // exception shouldn't happen, use assertTrue(true) if it should 
} 

फिर, संदेश को जोड़ने के लिए इन तरीकों में से संस्करण हैं

चेक API

+0

ठीक है, तो मैं संदेश के सामने संदेश ले जा सकता हूं, लेकिन परिणाम संदेश मुद्रित करने के लिए उत्तीर्ण या असफल होने पर कैसे पकड़ें? –

+1

मेरे उत्तर में दिखाए गए अपवाद को पकड़ें लेकिन यदि आप ऐसा करते हैं, तो अपवाद को दोबारा डालना सुनिश्चित करें (या इसे एक त्रुटि कलेक्टर में फंसाना) अन्यथा आपको झूठी सकारात्मक –

+0

मिल जाएगी, मैं जोर देता हूं ("कुछ संदेश", दावा); और संदेश अभी भी प्रिंट नहीं करता है। –

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