2017-02-21 11 views
8

हैलो दोस्तों मैं सोच रहा था कि मेरे अपवाद का परीक्षण करने का यह तरीका ठीक है, मेरे पास यह अपवाद है कि मुझे दूसरी टेस्ट एनोटेशन में फेंकने की ज़रूरत है, मैं लाल लाल बार के परिणामस्वरूप प्राप्त कर रहा हूं, और एक सफल और विफलता, जैसा कि आप अनुमान लगा सकते हैं कि विफलता मेरी चिंता है, मेरे पास असफल है(); वहां पर कारण यह है क्योंकि मैंने अपवाद का परीक्षण करने का तरीका पढ़ा है और अब मैं उलझन में हूं।परीक्षण अपेक्षित अपवादों का सही तरीका

मुझे यह भी कहना है कि मुझे ग्रीन बार मिल जाएगा क्योंकि मैं अपवाद की उम्मीद कर रहा हूं, लेकिन मुझे नहीं पता कि विफलता अपेक्षित अपवाद के उत्तर को देखने का सही तरीका है या नहीं।

इसके अलावा, अगर आप किसी भी सलाह की थी, मैं इसे

@Before 
    public void setUp() throws Exception { 
     LogPack.logPacConfig(Constants.LOGGING_FILE); 
     gtfri = "+RESP:GTFRI,380502,869606020101881,INCOFER-gv65,,10,1,1,0.0,0,888.1,-84.194560,9.955602,20170220074514,,,,,,0.0,,,,100,210100,,,,20170220074517,40A2$"; 
     weirdProtocol = "+RESP:GRI,380502,869606020101881,INCOFER-gv65,,10,1,1,0.0,0,888.1,-84.194560,9.955602,20170220074514,,,,,,0.0,,,,100,210100,,,,20170220074517,40A2$"; 
     factory = new LocomotiveFactory(); 
    } 
    @Test 
    public void GTFRICreationTester_shouldPass() throws TramaConProtolocoloDesconocido { 
     assertTrue(factory.createLocomotive(gtfri, false, new Date()) instanceof LocomotiveGTFRI); 
    } 

    @Test(expected = TramaConProtolocoloDesconocido.class) 
    public void GTFRICreationTester_shouldFail() { 
     try { 
      factory.createLocomotive(weirdProtocol, false, new Date()); 
      fail("Expected an TramaConProtolocoloDesconocido"); 
     } catch (TramaConProtolocoloDesconocido e) { 
      //assertSame("exception thrown as expected", "no se conoce el protocolo dado para la creacion de este factory", e.getMessage());; 
     } 
    } 

उत्तर

7

नहीं है उम्मीद अपवाद परीक्षण करने के लिए 3 सबसे आम तरीके:

पहला सबसे आम तरीका है, लेकिन आप केवल इसके साथ अपेक्षित अपवाद के प्रकार का परीक्षण कर सकते हैं। यह परीक्षण असफल हो जायेगी अगर ExceptionType फेंका नहीं किया जाएगा:

@Test(expected = ExceptionType.class) 
public void testSomething(){ 
    sut.doSomething(); 
} 

इसके अलावा, आप इस दृष्टिकोण

ExpectedException JUnit @Rule उपयोग करने के लिए बेहतर विकल्प है का उपयोग करते हुए विफलता संदेश निर्दिष्ट नहीं कर सकते। यहाँ आप की उम्मीद अपवाद

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

@Test 
public void testSomething(){ 
    thrown.expect(ExceptionType.class); 
    thrown.expectMessage("Error message"); 
    thrown.expectCause(is(new CauseOfExeption())); 
    thrown.reportMissingExceptionWithMessage("Exception expected"); 
    //any other expectations 
    sut.doSomething(); 
} 

तीसरा विकल्प आप ExpectedException @Rule उपयोग करने के साथ के रूप में ही करने की अनुमति देगा के लिए बहुत अधिक जोर सकता है, लेकिन सभी दावे मैन्युअल लिखा जाना चाहिए। हालांकि इस विधि का लाभ यह है कि आप किसी भी कस्टम दावे और किसी भी दावा पुस्तकालय का उपयोग कर सकते हैं जो आप चाहते हैं:

@Test 
public void testSomething(){ 
    try{ 
     sut.doSomething(); 
     fail("Expected exception"); 
    } catch(ExceptionType e) { 
    //assert ExceptionType e 
    } 
} 
2

आप अगर हम मान लें कि factory.createLocomotive(weirdProtocol, false, new Date()) फेंकता exceptiontry-catch

@Test(expected = TramaConProtolocoloDesconocido.class) 
public void GTFRICreationTester_shouldFail() { 

    factory.createLocomotive(weirdProtocol, false, new Date()); 

} 

Exception साथ पकड़ने के लिए की जरूरत नहीं है की सराहना करेंगे जब आप एक परिदृश्य लागू करें जो exception फेंक देता है।

void createLocomotive(param...) { 

    //something... 

    throw new TramaConProtolocoloDesconocido(); 
} 
2

आप ExpectedException उपयोग कर सकते हैं इस प्रकार है जो, अपवाद की उम्मीद त्रुटि संदेश को सत्यापित करने की क्षमता के साथ फेंक दिया करने के बारे में आप अधिक सटीक जानकारी प्रदान कर सकते हैं:

import org.junit.Rule; 
import org.junit.Test; 
import org.junit.rules.ExpectedException; 
import org.junit.runner.RunWith; 
public class TestClass { 

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


    @Test 
    public void GTFRICreationTester_shouldFail() { 
     expectedException.expect(TramaConProtolocoloDesconocido.class); 
     factory.createLocomotive(weirdProtocol, false, new Date()); 
    } 
} 

इसके बारे में अधिक expolore के लिए, आपको ब्लॉग मुझे यहाँ द्वारा लिखित उल्लेख कर सकते हैं - Expected Exception Rule and Mocking Static Methods – JUnit

1

अपने जावा 8 का उपयोग कर रहे हैं, मैं AssertJ पुस्तकालय

01 के लिए जाने के लिए सिफारिश करेंगेअधिक पढ़ने के लिए संदेश आदि

साथ कि समाधान आप एक ही बार में अपवाद प्रकार सत्यापित कर सकते हैं, साथ

, पर एक नज़र डालें: http://joel-costigliola.github.io/assertj/assertj-core-features-highlight.html#exception-assertion

+0

यह बहुत अच्छा लग रहा है! लेकिन जावा 7 का उपयोग कर रहा हूं, मैं इसे जांचने के लिए अपने प्रोजेक्ट पर कोशिश करूंगा! बहुत बहुत धन्यवाद –

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