द्वारा वापस किया गया था मान लें कि मेरे पास एक नकली वस्तु है, और मैं इसके किसी भी तरीके को रोकना नहीं चाहता, लेकिन मैं किसी ऑब्जेक्ट की विधि को रोकना चाहता हूं यह वापस आता है। उदाहरण के लिए,मॉकिटो - किसी ऑब्जेक्ट की विधि को दबाकर जो एक मॉक ऑब्जेक्ट विधि
when(mockObject.method1()).thenReturn(returnValue)
, यह कैसे सामान्य रूप से किया जाता है, लेकिन मैं के लिए देख रहा हूँ है
when(mockObject.method1().method2()).thenReturn(returnValue)
कि संभव है? अगर मैं ऐसा करता हूं तो मुझे एक NullPointerException मिलता है। वर्तमान में मैंने एक मॉक ऑब्जेक्ट को वापस करने के लिए पहली विधि को रोक दिया है, और फिर उस लौटे हुए मॉक ऑब्जेक्ट का उपयोग करके, दूसरी विधि को दबाएं। हालांकि, ये अस्थायी नकली वस्तुएं मेरे लिए बेकार हैं और कई विधियों को एक साथ करने के बाद, जिसके परिणामस्वरूप बहुत बेकार नकली वस्तुएं होती हैं।
संपादित करें: वास्तव में, यह संभव है कि कामों को चेन करना, लेकिन मेरी वस्तुएं एनपीई पैदा कर रही हैं। इस कोड (पहली पंक्ति) एक एनपीई खड़ी कर रहा है:
when(graphDb.index().getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);
लेकिन इस कोड काम करता है:
IndexManager indexManager = mock(IndexManager.class);
when(graphDb.index()).thenReturn(indexManager);
when(indexManager.getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);
तो चेनिंग getNodeAutoIndexer() जो एक AutoIndexer ऑब्जेक्ट, जबकि यह के लिए काम किया के लिए काम नहीं किया getRelationshipAutoIndexer() जो रिलेशनशिपऑटोइंडेक्सर देता है। दोनों रिटर्न वैल्यू निम्नानुसार मॉक किए गए हैं:
nodeAutoIndexer = (AutoIndexer<Node>) mock(AutoIndexer.class);
relAutoIndexer = mock(RelationshipAutoIndexer.class);
तो समस्या का कारण क्या हो सकता है?
धन्यवाद। तो मान लें कि मेरे पास कार्यों की एक लंबी श्रृंखला है, क्या मुझे प्रत्येक कार्य को रोकने की प्रक्रिया को दोहराना होगा? उस कोड को प्राप्त करने का कोई तरीका नहीं है जो एनपीई को इंडेक्स() के बिना काम करने के लिए काम कर रहा है? मुझे लगता है कि मॉकिटो को किसी भी तरह से कार्यों के रिटर्न प्रकारों के आधार पर नकली वस्तुओं के साथ स्वचालित रूप से उन विधियों को रोकना चाहिए ताकि मुझे उन स्टब्बिंग कार्यों को परेशान करने की आवश्यकता न हो जिन्हें मुझे सीधे आवश्यकता नहीं है। मुझे केवल उन कार्यों को अन्य कार्यों तक पहुंचने की आवश्यकता है ... – gsingh2011
नहीं। डिफ़ॉल्ट वापसी मान उन विधियों के लिए शून्य है जो ऑब्जेक्ट लौटाते हैं। आईएमएचओ, आपके पास जो समस्या है वह एक संकेत है कि आप डेमेटर के कानून का उल्लंघन करते हैं: अजनबियों से बात न करें। –
ध्यान दें कि मॉकिटो एक गहरी स्टब सुविधा प्रदान करता है ('नकली (लीगेसी टाइप।कक्षा, RETURNS_DEEP_STUBS) '), लेकिन इसके उपयोग को हतोत्साहित करें क्योंकि आप डिमेटर के कानून जैसे _good design_ कानून तोड़ सकते हैं। कृपया ध्यान दें कि यह सुविधा अभी तक सामान्य प्रकारों, जैसे एक सूची के साथ काम नहीं करती है। – Brice