2012-06-20 9 views
34

त्रुटि विस्तार:mockito परीक्षण जब मैं चलाने WrongTypeOfReturnValue अपवाद तब होता है

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Boolean cannot be returned by updateItemAttributesByJuId() 
updateItemAttributesByJuId() should return ResultRich 
This exception might occur in wrongly written multi-threaded tests. 
Please refer to Mockito FAQ on limitations of concurrency testing. 

मेरी कोड:

@InjectMocks 
protected ItemArrangeManager arrangeManagerSpy = spy(new ItemArrangeManagerImpl()); 
@Mock 
protected JuItemWriteService juItemWriteService; 

when(arrangeManagerSpy 
    .updateItemAttributes(mapCaptor.capture(), eq(juId), eq(itemTO.getSellerId()))) 
    .thenReturn(false); 

आप देख सकते हैं, मैं updateItemAttributes पर when (जो है एक boolean वापसी) बोल रहा हूँ नहीं updateItemAttributesByJuId पर।

  1. क्यों Mockito updateItemAttributesByJuId से एक boolean वापस जाने के लिए प्रयास कर रहा है?
  2. इसे कैसे संशोधित किया जा सकता है?

उत्तर

79

https://groups.google.com/forum/?fromgroups#!topic/mockito/9WUvkhZUy90 के अनुसार, आप अलग तरीके से व्यक्त करना चाहिए अपने

when(bar.getFoo()).thenReturn(fooBar) 

doReturn(fooBar).when(bar).getFoo() 
+0

टीक्स, मुझे यह पसंद है, तो यह अच्छी तरह से काम करता है –

+10

@confusedwindbell अगर आपकी समस्या हल हो जाती है तो उत्तर को चिह्नित करने पर विचार करें। –

+0

मुझे एक ही त्रुटि थी और यह समाधान मेरे लिए काम करता है। – YLombardi

20

के समान त्रुटि संदेश के लिए एक और कारण एक final विधि उपहास करने के लिए कोशिश कर रहा है। किसी को अंतिम तरीकों का नकल करने का प्रयास नहीं करना चाहिए (Final method mocking देखें)।

मैंने बहु-थ्रेडेड परीक्षण में त्रुटि का भी सामना किया है। उस मामले में जीएनए द्वारा जवाब दिया गया।

+0

ने मेरा केस हल किया [+1] –

1

यदि आप एनोटेशन का उपयोग कर रहे हैं, तो आपको @InjectMocks के बजाय @Mock का उपयोग करने की आवश्यकता हो सकती है। क्योंकि @InjectMocks एक साथ @Spy और @Mock के रूप में काम करता है। और @Spy हाल ही में निष्पादित विधियों का ट्रैक रखता है और आप महसूस कर सकते हैं कि गलत डेटा वापस/सबबेड किया गया है।

+1

"' @ इंजेक्शनमोक्स ''@ Spy' और' @ Mock' के रूप में काम करता है। " <- यह मेरे लिए गलत लगता है। आपने यह कहां से सुना? –

2

मुझे हाल ही में यह समस्या थी। समस्या यह थी कि जिस विधि को मैं नकल करने की कोशिश कर रहा था उसमें कोई एक्सेस संशोधक नहीं था। जनता को जोड़ने से समस्या हल हो गई।

2

मेरे मामले में समस्या एक स्थिर विधि का नकल करने और कक्षा पर mockStatic पर कॉल करने की कोशिश कर रही थी। इसके अलावा, मैं क्योंकि मेरी परीक्षा में @PrepareForTest()

0

मैं इस त्रुटि है में वर्ग शामिल करना भूल मैं दो उम्मीदों, ठोस प्रकार

MyClass cls = new MyClass(); 
MyClass cls2 = Mockito.mock(Myclass.class); 
when(foo.bar(cls)).thenReturn(); 
when(foo.baz(cls2)).thenReturn(); 

मैं इसे करने के लिए cls बदलकर तय पर एक नकली पर एक और एक था एक नकली भी