2012-01-27 31 views
47

क्या किसी दिए गए ऑब्जेक्ट को मॉकिटो मॉक है या नहीं, तो कोड में बताना संभव है?मैं कैसे बता सकता हूं कि कोई ऑब्जेक्ट मॉकिटो मॉक है या नहीं?

कारण यह है कि मैं ऐसा करना चाहता हूं कि एक नकली इसका उपयोग होने पर एक अलग त्रुटि संदेश लौटाएं। इसका उपयोग अन्य डेवलपर्स को सुझाव देने के लिए किया जाएगा कि उन्हें पूर्व-तैयार मॉक का उपयोग करना चाहिए जो पहले से ही नकली बनाने के बजाय उपयोगी तरीके से कॉल का जवाब देने के लिए सेट है।

फिलहाल मेरे पास सबसे अच्छा object.getClass().getName().contains("EnhancerByMockitoWithCGLIB") है लेकिन यह हैकी लगता है।

उत्तर

45

लगता है ऐसी कोई एपीआई मौजूद है (कृपया एक मुद्दे को उठाने, यह होना चाहिए!) सौभाग्य से (नीचे अपनी टिप्पणी के बाद) वहाँ org.mockito.internal.util पैकेज में एक विधि है:

import org.mockito.internal.util.MockUtil; 

new MockUtil().isMock(obj) 

भविष्य Mockito.isMock() विधि में सार्वजनिक एपीआई में जोड़ा जा सकता है, देखें: Issue 313: Provide isMock outside of org.mockito.internal)

MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect) 

कौन सा है कि @ दाऊद वालेस उठाया मुद्दा का परिणाम है:

+3

आपके उत्तर के बाद मैंने [स्रोत के लिए स्रोत] [https://fisheye2.atlassian.com/browse/mockito/trunk/src/org/mockito/internal/util/MockUtil.java पर एक नज़र डाली? आर = 2020) और सीधे निजी 'isMockitoMock' विधि के तहत एक सार्वजनिक 'isMock' विधि है जिसका उपयोग लगता है। मैं मॉकिटो मेलिंग सूची पर पोस्ट करूंगा ताकि यह जांच सके कि 'org.mockito.internal.util' से खुद को कॉल करने का एक अच्छा विचार है या नहीं। – mikej

+0

'org.mockito.internal.util' पैकेज के इरादे में से एक यह है कि मॉकिटो टीम एक नए संस्करण में इस पैकेज में कुछ भी बदल सकती है। तो यदि आप इस पैकेज का उपयोग करते हैं, तो आपके परीक्षण भविष्य में संभावित रूप से तोड़ सकते हैं। हालांकि, यह बेहद असंभव है कि हम इस विशेष विधि से छुटकारा पायेंगे, इसलिए मैं कहूंगा कि यह उपयोग करने के लिए काफी सुरक्षित है। –

+0

@ माइकज: +1, किसी भी तरह से मैंने उसे याद किया, धन्यवाद! मैंने पुराना जवाब हटा दिया और इसके बजाय अपना सुझाव दिया ताकि यह बेहतर खड़ा हो। आशा है कि आपको बुरा लगेगा। –

32

के रूप में एक अनुवर्ती, Mockito सार्वजनिक एपीआई अब इस पद्धति है। लौटाया गया ऑब्जेक्ट 'isMock()' के साथ-साथ 'isSpy()' के तरीकों का समर्थन करता है और बाद में इसे अधिक नकली संबंधित जानकारी प्रदान करने के लिए बढ़ाया जा सकता है।