2012-09-19 13 views
10

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

public MyClass 
    { 
     // This is a method in my class which calls a collaborator which I 
     // want to mock in my test case 
     public SomeObject findSomething(SomeOtherObject param) throws Exception 
     { 
      SomeOtherObject param a = myCollaborator.doSomething(param); 
      // Do something with the object and then return it 
      return a; 
     } 
    } 

अब यहाँ मेरी परीक्षा है। अब मैं वास्तव में अपने परीक्षण मामले में जो हासिल करना चाहता हूं वह यह है कि मैं यह जांचना चाहता हूं कि मेरा कार्य (ढूंढने वाला कुछ) ठीक से कुछ अपवाद फेंकने के मामले में अपवाद फेंकता है। भविष्य में कुछ अन्य डेवलपर हस्ताक्षर बदल सकते हैं (विधि को अपवाद विधि हस्ताक्षर का वास्तव में हिस्सा नहीं है) और मेरी विधि से अपवाद को हटा दें। तो मैं कैसे सुनिश्चित कर सकता हूं कि कोई भी बदलता है?

@Test(dataProvider="mydataProvider", expectedExceptions=Exception.class) 
public void MyTest(SomeOtherObject param) throws Exception { 
{ 
    EasyMock.expect(myCollaboratorMock.doSomething(param)).andThrow(new Exception()); 
    EasyMock.replay(myCollaboratorMock); 
} 

मैं अपवाद हो रही है

"java.lang.IllegalArgumentException: पिछले विधि नकली java.lang.Exception फेंक नहीं कर सकते पर बुलाया"

क्या मैं गलत कर रहा हूँ यहाँ? क्या कोई मेरे विशेष परिदृश्य के लिए एक परीक्षण केस लिखने के बारे में कुछ प्रकाश डाल सकता है?

उत्तर

18

सहयोगी की doSomething() विधि यह घोषणा नहीं करती है कि यह अपवाद फेंक सकता है, और आप इसे फेंकने के लिए अपने मॉक को बता रहे हैं। यह मुमकिन नहीं है।

अपवाद एक चेक अपवाद है। इसे विधि हस्ताक्षर में घोषित किए जाने पर ही फेंक दिया जा सकता है। यदि विधि में throws खंड नहीं है, तो यह रनटाइम अपवादों को फेंक रहा है (यानी RuntimeException या कोई वंशज वर्ग)।

+0

झूठी। [जेनेरिक क्विर्क] (http://java.dzone.com/articles/throwing-undeclared-checked) का उपयोग करके, कहीं भी बहुत से चेक अपवादों को फेंकना संभव है। – jontejj

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