2016-10-24 12 views
6

में संभावित नल पैरामीटर से कैसे मिलान करें मैं यह सत्यापित करने की कोशिश कर रहा हूं कि जिस कक्षा में मैं परीक्षण कर रहा हूं वह सही निर्भरता वर्ग की विधि को कॉल करता है। तो मैं विधि पैरामीटर से मिलान करने की कोशिश कर रहा हूं, लेकिन मुझे वास्तव में इस परीक्षण में वास्तविक मूल्यों की परवाह नहीं है, क्योंकि मैं अपना परीक्षण भंगुर नहीं बनाना चाहता हूं।मॉकिटो

हालांकि, मैं यह स्थापित करने मुसीबत में चल रहा हूँ क्योंकि Mockito निर्णय लिया है कि व्यवहार मैं उम्मीद कर रहा हूँ एक बग है: https://github.com/mockito/mockito/issues/134

तो what't सही तरीका एक पैरामीटर के लिए एक Matcher परिभाषित करने के लिए कि शून्य हो सकता है?

समस्या # 134 "निश्चित" के साथ, यह कोड विफल रहता है क्योंकि मैचर्स केवल पहले मामले में मेल खाते हैं। मैं सभी 4 मामलों में काम करने के लिए एक मैचर को कैसे परिभाषित कर सकता हूं?

MyClass c = mock(MyClass.class); 

c.foo("hello", "world"); 
c.foo("hello", null); 
c.foo(null, "world"); 
c.foo(null, null); 

verify(c, times(4)).foo(anyString(), anyString()); 

उत्तर

1

मैं इस any(String.class)

में स्विच करके काम करने के लिए मैं इस एक सा भ्रामक लगता है, क्योंकि एपीआई जो बताते हैं कि anyString() कम से कम ऊपर तक सिर्फ any(String.class) के लिए एक उपनाम है लगता मिला 2.0 अपडेट। निष्पक्ष होने के लिए, दस्तावेज निर्दिष्ट करता है कि anyString() केवल गैर-शून्य तारों से मेल खाता है। यह सिर्फ मेरे लिए प्रतिद्वंद्वी लगता है।

+0

यह मॉकिटो 2.0 के बाद से सही जवाब प्रतीत होता है। 2.0 से पहले मॉकिटो के संस्करणों में, 'anyString()' का उपयोग करके आपका मूल कोड काम करेगा, लेकिन यह एक ब्रेकिंग बदलाव है जिसे मॉकिटो टीम 2.0 के साथ पेश किया गया था। –

+1

यह अब और काम नहीं करता है। दस्तावेज़ीकरण से - '' 'चूंकि मॉकिटो 2.1.0 यह विधि एक प्रकार की जांच करेगी, इस प्रकार null मान अधिकृत नहीं हैं' –

-1

कैसे के बारे में:

verify(c, times(4)).foo(anyObject(), anyObject()); 

आप के लिए है कि काम करता है?

Matchers.anyObject() null एस के लिए अनुमति देता है।

Mockito docs में संदर्भ:

+0

नहीं, क्योंकि फिर मेरे आईडीई शिकायत है कि 'foo (स्ट्रिंग, स्ट्रिंग)' 'foo द्वारा लाया नहीं जा सकता (वस्तु, ऑब्जेक्ट) ' – gridDragon

+0

आप शायद किसी भी()' लेकिन 'anyObject' रिटर्न' ऑब्जेक्ट 'कैप्चरिंग प्रकार का उपयोग कर सकते हैं और इसलिए काम नहीं कर सकते हैं। –

11

any()

की javadocs Mockito 2.1.0 के बाद से, केवल गैर-शून्य String अनुमति देते हैं। चूंकि यह एक शून्य संदर्भ है, सुझाए गए एपीआई मैच null रैपर isNull() होगा। हमें लगा कि यह परिवर्तन परीक्षणों को अधिक सुरक्षित बनाएगा कि यह मॉकिटो 1.x के साथ था।

तो, जिस तरह से नल स्ट्रिंग तर्क मैच के लिए स्पष्ट घोषणा है:

nullable(String.class) 
+0

धन्यवाद! लीजेंड। – prijupaul