मॉकिटो के साथ जावा सत्यापित शून्य विधि कॉल एन बार


140

मैं यह सत्यापित करने की कोशिश कर रहा हूं कि एक (शून्य) विधि को डीएओ के अंदर कहा जा रहा है - मैं एक प्रतिबद्ध बिंदु का उपयोग कर रहा हूं जो उस बिंदु तक परिणामों की सूची भेजता है, सूची को रीसेट करता है और जारी रखता है। मान लीजिए कि मेरे पास सूची में 4 चीजें हैं और मेरे पास 1 का एक प्रतिबद्ध बिंदु है, मैं उम्मीद करता हूं कि "भेजें" विधि को 4 बार बुलाया जाएगा। मैं यह सत्यापित कर सकता हूं कि लिखने से विधि एक बार कहलाती है

Mockito.verify(mock).send()

यह गुजरता है .. लेकिन मैं यह कहते समय की संख्या को सत्यापित करना चाहता हूं। मुझे लगता है कि होगा

Mockito.verify(mock.send(), times(4))

पर्याप्त होगा, लेकिन यह कहता है कि सत्यापन के लिए पैरामीटर सही नहीं हैं।

संयोग से, अगर मैं बदल Mockito.verify(mock).send()करने के लिए Mockito.verify(mock.send())या Mockito.verify((mock).send())मैं एक ही त्रुटि मिलती है। इस पर विचार?


10
कोशिश करो Mockito.verify(mock, times(4)).send()। मुझे आश्चर्य है कि आपने send()विधि को विधि के अंदर "स्थानांतरित" क्यों किया verify। आपके पास पहले से ही सही सिंटैक्स था।
टॉम


यह भी ध्यान दें कि यदि आप परवाह नहीं करते हैं कि कितनी बार कुछ कहा जाता है, तो आप लिख सकते हैंverify(mock, atLeastOnce()).send();
दाऊद इब्न करीम

धन्यवाद, यह सही है। मैंने जो पाया, वह Mockito.verify(mock).send()गुज़रा हुआ था, लेकिन सिर्फ इसे एनकैप्सुलेट करने से एक त्रुटि हुई, जो कुछ भी नहीं बदलती। हालाँकि, यह एक जीत है!
nbpeth

जवाबों:


237

आवश्यक विधि है मॉकिटो # सत्यापित :

public static <T> T verify(T mock,
                           VerificationMode mode)

mockआपकी मॉक ऑब्जेक्ट है और modeयह VerificationModeबताता है कि कैसे मॉक को सत्यापित किया जाना चाहिए। संभव तरीके हैं :

verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
verify(mock, only()).someMethod("no other method has been called on the mock");

विधि और इन सत्यापन विधियों Mockitoका उपयोग करने के लिए आपको कक्षा से इन स्थैतिक आयातों की आवश्यकता होगी verify:

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

तो आपके मामले में सही सिंटैक्स होगा:

Mockito.verify(mock, times(4)).send()

यह पुष्टि करता है कि विधि sendको मॉक किए गए ऑब्जेक्ट पर 4 बार कहा गया था । यह विफल हो जाएगा अगर इसे 4 बार से कम या अधिक कहा जाता था।


यदि आप केवल जांच करना चाहते हैं, यदि विधि को एक बार बुलाया गया है, तो आपको पास होने की आवश्यकता नहीं है VerificationMode। एक सरल

verify(mock).someMethod("was called once");

पर्याप्त होगा। यह आंतरिक रूप से उपयोग करता है verify(mock, times(1)).someMethod("was called once");


"सत्यापन" सत्यापन को प्राप्त करने के लिए एक ही मॉक पर कई सत्यापन कॉल करना संभव है। मॉकिटो कुछ इस तरह का समर्थन नहीं करता है verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");, लेकिन हम लिख सकते हैं

verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");

इसके बजाय, एक ही व्यवहार पाने के लिए। सीमाएं शामिल हैं , इसलिए परीक्षण का मामला हरा है जब विधि को 4, 5 या 6 बार कहा गया था।


1
किसी के लिए यह देखना है कि वे VerificationModeविधियाँ कहाँ हैं (स्थैतिक आयात या स्पष्ट संदर्भ के लिए), वे अंदर हैं org.mockito.internal.verification.VerificationModeFactory
स्टीव चैम्बर्स

verify(mock, atLeast(0)).someMethod("was called any number of times");एक कॉल सत्यापन को अनदेखा करने में मददगार था
tj-recess

2
क्या ऐसा कुछ है verify(between(m,n))जो m और n के बीच कॉल की संख्या की पुष्टि करता है?
निशांत

2
@nishant नहीं है, Mockito कि समर्थन करने के लिए प्रतीत नहीं होता है, लेकिन आप कॉल कर सकते हैं verifyके साथ बार करने के लिए atLeast(M)और atMost(n)एक ही व्यवहार मिलता है। मैंने उत्तर को उस स्पष्टीकरण को संपादित किया है जो।
टॉम

@KevinWelker आप सही हैं, मैंने इसके बारे में जानकारी निकाल दी है VerificationModeFactory। यह अभी भी नवीनतम संस्करण में उपलब्ध है, लेकिन मैं सहमत हूं कि आंतरिक कक्षाओं का उपयोग नहीं किया जाना चाहिए।
टॉम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.