एक अप्रत्याशित अपवाद एक परीक्षण विफलता है, इसलिए आपको न तो किसी को पकड़ना है और न ही पकड़ना है।
@Test
public void canConvertStringsToDecimals() {
String str = "1.234";
Assert.assertEquals(1.234, service.convert(str), 1.0e-4);
}
service
तक फेंक नहीं है एक IllegalArgumentException
क्योंकि str
उस में एक दशमलव बिंदु यह है कि एक साधारण परीक्षण की विफलता हो जाएगा है।
@Test
के वैकल्पिक expected
तर्क द्वारा एक अपेक्षित अपवाद को संभाला जाना चाहिए।
@Test(expected=NullPointerException.class)
public void cannotConvertNulls() {
service.convert(null);
}
तो प्रोग्रामर आलसी था और Exception
फेंक दिया, या अगर वह service
वापसी 0.0
था, परीक्षण असफल हो जायेगी। केवल NPE
सफल होगा। ध्यान दें कि अपेक्षित अपवाद के उप-वर्ग भी काम करते हैं। यह NPE
एस के लिए दुर्लभ है, लेकिन IOException
एस और SQLException
एस के साथ आम है।
दुर्लभ मामले में आप एक विशिष्ट अपवाद संदेश के लिए परीक्षण करना चाहते हैं, तो आप नए ExpectedException
जुनीट @Rule
का उपयोग करें।
@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void messageIncludesErrantTemperature() {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("-400"); // Tests that the message contains -400.
temperatureGauge.setTemperature(-400);
}
अब, जब तक setTemperature एक IAE
फेंकता है और संदेश के तापमान उपयोगकर्ता सेट करने के लिए कोशिश कर रहा था होता है, परीक्षण विफल रहता है। इस नियम का उपयोग अधिक परिष्कृत तरीकों से किया जा सकता है।
आपका उदाहरण सबसे अच्छा द्वारा नियंत्रित किया जा सकता है:
private void testNumber(String word, int number)
throws OutOfRangeNumberException {
assertEquals(word, service.convert(number));
}
@Test
public final void testZero()
throws OutOfRangeNumberException {
testNumber("zero", 0);
}
आप testNumber
इनलाइन कर सकते हैं; अब, यह ज्यादा मदद नहीं करता है। आप इसे एक पैरामीरिज्ड टेस्ट क्लास में बदल सकते हैं।
ExpectedException उम्मीद अपवाद के लिए परीक्षण करने के लिए पसंदीदा तरीका है। –
मैं सहमत हूं और मैंने पहले ही एरिक के जवाब को उखाड़ फेंक दिया है। – javadeveloper
यदि आपको अपवाद की संरचना की जांच करने की आवश्यकता है तो आपको केवल अपेक्षित अपवाद की आवश्यकता है। उदाहरण के लिए, सीएमआईएसएक्सप्शन में उनके अंदर एक निर्दिष्ट दोष दोष सेट होना चाहिए। मुझे जांचने के लिए परीक्षण लिखना पड़ा, और मैंने उस उद्देश्य के लिए हैमक्रिस्ट मैचर्स का इस्तेमाल किया। यदि आप बस अपवाद की अपेक्षा करते हैं, तो @Test पर तर्क का उपयोग करें। –