2013-03-05 8 views
70

मैं जावा के लिए वास्तव में नया हूं।जुनीट परीक्षण अपवाद

मैं एक निर्माता पर कुछ जुनीट परीक्षण चला रहा हूं। कन्स्ट्रक्टर ऐसा है कि अगर इसे अपने पैरामीटर में से एक के लिए शून्य या खाली स्ट्रिंग दी जाती है, तो इसे अपवाद फेंकना चाहिए।

जब मैं जुनीट में एक नल या खाली स्ट्रिंग पैरामीटर के साथ इस कन्स्ट्रक्टर का परीक्षण करता हूं, तो मुझे एक लाल बार मिलता है, भले ही मैं लगभग 100% सुनिश्चित करता हूं कि कन्स्ट्रक्टर विधि वास्तव में अपवाद फेंकती है जब ऐसे पैरामीटर पास होते हैं इसके लिए

यदि जुआनिट में कोई हरा पट्टी नहीं होनी चाहिए तो विधि अपवाद को जिस तरह से माना जाता है? या यह है कि जब आप एक अपवाद फेंकने के तरीके को लाल बार प्राप्त करना चाहते हैं तो इसे किस तरह से माना जाता है?

उत्तर

108
@Test(expected = Exception.class) 

जूनिट बताता है कि अपवाद अपेक्षित परिणाम है, इसलिए अपवाद फेंकने पर परीक्षण पारित किया जाएगा (हरे रंग के रूप में चिह्नित)।

@Test 

लिए JUnit यदि अपवाद फेंक दिया जाता है में विफल रहा है के रूप में परीक्षण पर विचार करेगी।
यह link मदद कर सकता है।

38

क्या आप वाकई अपवाद की अपेक्षा करने के लिए कह चुके हैं?

नए JUnit (> = 4.7), आप की तरह कुछ ( here से) का उपयोग कर सकते

@Rule 
public ExpectedException exception = ExpectedException.none(); 

@Test 
public void testRodneCisloRok(){ 
    exception.expect(IllegalArgumentException.class); 
    exception.expectMessage("error1"); 
    new RodneCislo("891415",dopocitej("891415")); 
} 

के लिए और बड़ी उम्र JUnit के लिए

, इस:

@Test(expected = ArithmeticException.class) 
public void divisionWithException() { 
    int i = 1/0; 
} 
+0

यदि टेस्ट क्लास अपवाद फेंकता है, तो आप केवल अपवाद और परीक्षण को फेंक सकते हैं जहां आपने जूनिट परीक्षण के मामलों को लिखा है। @Test (अपेक्षित = IllegalArgumentException.class) का उपयोग करने के साथ –

5

यदि आपका निर्माता इस के समान है एक:

public Example(String example) { 
    if (example == null) { 
     throw new NullPointerException(); 
    } 
    //do fun things with valid example here 
} 

तब, जब आप इस JUnit परीक्षण चलाने आप एक हरे रंग की पट्टी मिल जाएगा:

@Test(expected = NullPointerException.class) 
public void constructorShouldThrowNullPointerException() { 
    Example example = new Example(null); 
} 
6

उपयोग का एक आगमन अपेक्षित अपवाद नियम (संस्करण 4.7) यह है कि आप अपवाद संदेश का परीक्षण कर सकते हैं न कि केवल अपेक्षित अपवाद।

और matchers उपयोग कर, आप संदेश का हिस्सा परीक्षण कर सकते हैं यदि आप रुचि रखते हैं:

exception.expectMessage(containsString("income: -1000.0")); 
4

हालांकि @Test(expected = MyException.class) और ExpectedException rule बहुत अच्छा विकल्प हैं, कुछ उदाहरणों देखते हैं जहां JUnit3 शैली अपवाद को पकड़ने अब भी है सबसे अच्छा तरीका है जाने के लिए:

@Test public void yourTest() { 
    try { 
    systemUnderTest.doStuff(); 
    fail("MyException expected."); 
    } catch (MyException expected) { 

    // Though the ExpectedException rule lets you write matchers about 
    // exceptions, it is sometimes useful to inspect the object directly. 

    assertEquals(1301, expected.getMyErrorCode()); 
    } 

    // In both @Test(expected=...) and ExpectedException code, the 
    // exception-throwing line will be the last executed line, because Java will 
    // still traverse the call stack until it reaches a try block--which will be 
    // inside the JUnit framework in those cases. The only way to prevent this 
    // behavior is to use your own try block. 

    // This is especially useful to test the state of the system after the 
    // exception is caught. 

    assertTrue(systemUnderTest.isInErrorState()); 
} 

एक और पुस्तकालय यहाँ मदद करने के लिए दावा है कि catch-exception है; हालांकि, मई 2014 तक, प्रोजेक्ट रखरखाव मोड (जावा 8 द्वारा अप्रचलित) में प्रतीत होता है, और मॉकिटो कैच-अपवाद की तरह ही गैर-final विधियों का उपयोग कर सकते हैं।

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