2012-10-30 13 views
11

मैं जावा प्रोजेक्ट पर काम कर रहा हूं, एक डीटीओ में एक .equals विधि के लिए यूनिट टेस्ट लिखना चाहता हूं। .equals विधि में, परीक्षण के तहत दोनों ऑब्जेक्ट्स द्वारा बुलाया गया .getClass() विधि है। मैं इसे मजाक करना चाहता हूं, लेकिन मैं यह नहीं बता सकता कि यह किस प्रकार की वस्तु चाहता है। मैंने कोशिश की,मैं Object.getClass का नकल कैसे करूं?

when(mockRoomInv.getClass()).thenReturn(RoomInv.class);

लेकिन बिल्ली के रूप में यकीन है कि कुछ भी नहीं किया। GetClass का रिटर्न प्रकार क्या है, और मैं इसे कैसे उपयोग करूं?

+0

जब तक मुझे कुछ याद नहीं आ रहा है - ऐसी विधि का मज़ाक करने में कोई बात नहीं है जो पहले से मौजूद है और आप बदल नहीं पाएंगे, और ऑब्जेक्ट से प्राप्त किसी भी विधि को हर वर्ग में मौजूद है। –

उत्तर

3

Object.getClass() एक अंतिम विधि है, इसलिए आप इसे मॉकिटो के साथ नकल नहीं कर सकते हैं।

आप स्थिर और (यह एक के रूप में) अंतिम तरीकों और Powermock साथ भी निजी तरीकों नकली कर सकते हैं (यह एक काफी शांत उपकरण है;)

http://code.google.com/p/powermock/

आप के साथ उपयोग कर सकते हैं Mockito यहां बताए गए:

http://code.google.com/p/powermock/wiki/MockitoUsage13

वहां आपको कुछ उपयोगी उदाहरण मिलेंगे।

9

Object.getClass() अंतिम है, तो आप उस विधि को मॉकिटो के साथ नकल नहीं कर सकते हैं। मैं दृढ़ता से सलाह दूंगा कि कक्षा को इंजेक्ट करने के लिए अपने कोड को दोबारा लगाने के लिए। यदि यह संभव नहीं है, तो आप powermock को आजमा सकते हैं, जहां आप किसी भी अंतिम विधि का नकल कर सकते हैं। Object.getClass() थोड़ा सा विशेष है, इसलिए पावरमॉक में MockGateway.MOCK_GET_CLASS_METHOD = true सेट करना सुनिश्चित करें।