2015-12-16 9 views
10

पर विचार के लिए निम्न विधि:विधि कॉल किए बिना विधि कॉल और वापसी मूल्य का नकल कैसे करें?

public boolean isACertainValue() { 
     if(context.getValueA() != null && context.getValueA().toBoolean() == true) { 
     if(context.getType() != null && context.getType() == ContextType.certainType) { 
      return true; 
     } 
    } 
    return false; 
} 

मैं इस कोड नहीं लिखा था, यह नरक के रूप में बदसूरत है, यह पूरी तरह overcomplicated है, लेकिन मैं इसके साथ काम करना है।

अब मैं एक विधि का परीक्षण करना चाहता हूं जो इस विधि के लिए कॉल पर निर्भर करता है।

मैंने सोचा कि मैं द्वारा इस समस्या से निपटने सकता है: क्योंकि उस मामले मैं परीक्षण करना चाहते है

Mockito.when(spy.isACertainValue()).thenReturn(true);

लेकिन यह अभी भी विधि-शरीर बुला रहा है के रूप में यह काम नहीं करता है:/

मैं nullpointers पाने या बल्कि मैं

misusing.WrongTypeOfReturnValue की तर्ज पर कुछ पाने; Boalan getValueA() द्वारा वापस नहीं किया जा सकता है। getValueA() ValueA लौटना चाहिए

तो मैं (एक समाधान के रूप) की कोशिश की करने के लिए:

Mockito.when(contextMock.getValueA()).thenReturn(new ValueA()); और Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType);

लेकिन फिर मैं एक nullpointer नहीं कर सकते कि मैं सक्षम होने के लिए लग रहे प्राप्त डीबग करने के लिए।

तो, इस मामले में यह कैसे किया जाता है?

+1

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

उत्तर

13

जब आप

Mockito.when(spy.isCertainValue()).thenReturn(true); 

विधि isCertainValue() यहाँ बुलाया जा रहा है लागू कर रहे हैं। इस प्रकार जावा काम करता है: Mockito.when के तर्क का मूल्यांकन करने के लिए, spy.isCertainValue() का परिणाम मूल्यांकन किया जाना चाहिए ताकि विधि को कॉल किया जाना चाहिए।

से आप ऐसा नहीं करना चाहते हैं, तो आप the following construct उपयोग कर सकते हैं:

Mockito.doReturn(true).when(spy).isCertainValue(); 

यह वही मजाक असर नहीं होगा लेकिन विधि इस के साथ कहा जाता है नहीं किया जाएगा।

+0

धन्यवाद, अब मैं ट्रैक पर अधिक कर रहा हूँ ... मैं एक nullpointer xD यद्यपि मैं इतना इस कार्यक्रम नफरत मिलता है, यह एक abomination है: एक्स – Sorona

+0

टूटी लिंक। आप जासूस कहाँ सेट करते हैं? – powder366

+0

यह मेरे लिए काम किया। यह एनपीई फेंकना बंद कर दिया। धन्यवाद तुनाकी! – Dish

0

इस कोड सही है:

Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType); 

लेकिन आप NullPointerException हो रही है क्योंकि आप मजाक मूल्य कि परिभाषित करता है होना चाहिए परिभाषित नहीं किया था, मैं अच्छी तरह से वसंत, उपयोग कर रहा हूँ मेरी संदर्भ फ़ाइल में जब मैं @Autowired को परिभाषित सेम मैं इसे इस तरह से परिभाषित करते हैं:

<bean id="contextMock" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="com.example.myspringproject.bean.ContextMock" /> 
</bean> 
संबंधित मुद्दे