2012-07-12 23 views
6

मैं कुछ मोंगो कक्षाएं नकली करने के लिए इतना है कि मैं एक कनेक्शन (काफी मानक सामान), लेकिन निम्न कोड की जरूरत नहीं है कोशिश कर रहा हूँ मुझे देता समस्याओं:Mockito - 0 matchers उम्मीद, 1 रिकॉर्ड (InvalidUseOfMatchersException)

when(dbCollection.find(isA(DBObject.class))).thenReturn(dbCursor); 

चल रहा है यह मुझे है मिलती है:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
तर्क matchers का अमान्य उपयोग!
0 matchers की उम्मीद, 1 दर्ज की गई:
पर ... GridFileManagerTest.beforeClass (GridFileManagerTest.java:67)

यह अपवाद हो सकता है अगर matchers कच्चे मूल्यों के साथ संयुक्त कर रहे हैं:
// गलत: someMethod (anyObject(), "कच्चे स्ट्रिंग");

मैचर्स का उपयोग करते समय, सभी तर्कों को मैचर्स द्वारा प्रदान किया जाना चाहिए।
उदाहरण के लिए:
// सही:
कुछ विधि (anyObject(), eq ("matcher द्वारा स्ट्रिंग"));

अधिक जानकारी के लिए Matchhers वर्ग के लिए javadoc देखें।

यदि मैं यह, हालांकि ऐसा करने के लिए किए गए:

when(dbCollection.find(mock(DBObject.class))).thenReturn(dbCursor); 

यह अब है कि समस्या है। ऐसा लगता है कि मैं जो भी चाहता हूं उसे पूरा नहीं करता - मैं विधि को वापस करना चाहता हूं जब विधि को DBObject प्रकार के ऑब्जेक्ट के साथ बुलाया जाता है।

विचार?

+0

पहले जवाब का '[संपादित करें] भाग देखें। शायद आपको एक ही समस्या है? http://stackoverflow.com/questions/10828843/powermockito-got-invaliduseofmatchersexception-when-use-matchers-mocking-static – bezmax

+0

तो डीबीसीओलेक्शन एक मॉकिटो मॉक ऑब्जेक्ट है? –

उत्तर

13

मुझे लगता है कि आपके परिणाम परिणाम के साथ संगत हैं जो dbCollection एक मॉकिटो-मॉक नहीं है (या आपकी विधि स्थैतिक या अंतिम है)। इसका मतलब यह होगा कि एक मचर का उपयोग किया जा रहा है जहां कोई भी इस्तेमाल नहीं किया जा सकता है; इसलिए "0 matchhers अपेक्षित, 1 दर्ज"।

+0

यह एक नकली (DBCollection.class) – Paul

+2

है (लेकिन यह मानना ​​है कि यह मोंगडीबी है) ऐसा लगता है कि ['DBCollection # find()'] (http://api.mongodb.org/java/2.6/com/mongodb/DBCollection। एचटीएमएल # ढूंढें (com.mongodb.DBObject)) अंतिम है, जिसका एक ही प्रभाव है। आप [PowerMock] (http://code.google.com/p/powermock/) का उपयोग किए बिना अंतिम विधियों का नकल नहीं कर सकते हैं। –

+0

यह वास्तव में एक अंतिम विधि है, मेरे लिए यह स्पष्ट करने के लिए धन्यवाद! – Paul