2011-11-22 16 views
19

रिटर्न मैं Mockito में यह है:Mockito thenReturn एक ही उदाहरण

when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(new ServiceMock()); 

createNewEntityOfType विधि हमेशा एक नया ServiceMock उदाहरण लौटना चाहिए, लेकिन यह दो बार एक ही संदर्भ देता है।

क्यों thenReturn विधि ServiceMock वापस नहीं लौटाती है?

+1

साथ साथ एक [कॉलबैक] (http छोटा करते प्रयास करें उपयोग कर सकते हैं .com/hg/नवीनतम/org/mockito/Mockito.html # 11) – McDowell

+0

धन्यवाद! यह काम करता है – myborobudur

उत्तर

35

thenReturn विधि हमेशा इसे पारित करने के लिए वापस लौटाएगी। thenReturn पर कॉल से पहले कोड new Servicemock() निष्पादित किया जा रहा है। बनाए गए ServiceMock को thenReturn पर पास किया जा रहा है। इसलिए thenReturn का एक पूर्ण उदाहरण ServiceMock एक सृजन तंत्र नहीं है।

आप एक नया उदाहरण प्रदान करने के लिए की जरूरत है, का उपयोग thenAnswer

when(mockedMergeContext.createNewEntityOfType(IService.class)) 
    .thenAnswer(new Answer<IService>() { 
    public IService answer(InvocationOnMock invocation) { 
     return new ServiceMock(); 
    } 
    }); 
+0

धन्यवाद मेरे दिन को बचाने के लिए बहुत कुछ :) –

10

आप refactor करने के लिए है कि विभिन्न बयानों में समझने के लिए क्यों ऐसा होता है चाहते हो सकता है।

Service svc = new ServiceMock(); 
when(mockedMergeContext.createNewEntityOfType(IService.class)).thenReturn(svc); 

क्या आप देखते हैं कि यह क्यों काम नहीं करता है? :)

यह हमेशा एसवीसी में इंस्टेंस होल्डिंग लौटा रहा है, यह प्रत्येक बार विधि लागू होने पर new ServiceMock() का फिर से मूल्यांकन नहीं करेगा। //docs.mockito.googlecode:

+1

आप सही हैं! धन्यवाद! – myborobudur

3

जावा 8 में lambdas के साथ आप सिर्फ

when(mockedMergeContext.createNewEntityOfType(IService.class)).thenAnswer(invocation -> new ServiceMock()); 

तो बस .thenReturn(new MyMock());

की जगह .thenAnswer(invocation -> new MyMock());

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