यह महान प्रश्न है! मुझे लगता है कि इसका मूल कारण निम्नलिखित है, हम JUnit का उपयोग केवल इकाई परीक्षण के लिए ही नहीं कर रहे हैं। इसलिए प्रश्न को विभाजित किया जाना चाहिए:
- क्या मुझे अपने एकीकरण में Mockito.verify () का उपयोग करना चाहिए (या किसी अन्य उच्चतर इकाई परीक्षण से) ?
- क्या मुझे अपने ब्लैक-बॉक्स में Mockito.verify () का उपयोग करना चाहिए यूनिट-परीक्षण ?
- क्या मुझे अपने व्हाइट-बॉक्स यूनिट-परीक्षण में Mockito.verify () का उपयोग करना चाहिए ?
इसलिए यदि हम उच्च-से-इकाई परीक्षण की उपेक्षा करेंगे, तो प्रश्न को फिर से परिभाषित किया जा सकता है " Mockito.verify () के साथ व्हाइट-बॉक्स यूनिट-परीक्षण का उपयोग करना इकाई परीक्षण और मेरे कार्यान्वयन के बीच महान जोड़ी बनाता है, क्या मैं कुछ " ग्रे-बॉक्स बना सकता हूं " यूनिट-परीक्षण और इसके लिए मुझे अंगूठे के किन नियमों का उपयोग करना चाहिए "।
अब, इस चरण-दर-चरण के बारे में जानें।
* - क्या मुझे अपने एकीकरण में Mockito.verify () का उपयोग करना चाहिए (या किसी अन्य उच्चतर इकाई परीक्षण ? * मुझे लगता है कि उत्तर स्पष्ट रूप से नहीं है, इसके अलावा आपको इसके लिए मॉक का उपयोग नहीं करना चाहिए। आपका परीक्षण यथासंभव वास्तविक आवेदन के करीब होना चाहिए। आप पूर्ण उपयोग के मामले का परीक्षण कर रहे हैं, आवेदन का अलग-थलग हिस्सा नहीं।
* ब्लैक-बॉक्स बनाम व्हाइट-बॉक्स यूनिट-परीक्षण * यदि आप ब्लैक-बॉक्स दृष्टिकोण का उपयोग कर रहे हैं तो आप वास्तव में क्या कर रहे हैं, आप (सभी समतुल्यता वर्ग) इनपुट, एक राज्य और परीक्षण करते हैं जो आपको अपेक्षित आउटपुट प्राप्त होगा। इस दृष्टिकोण में सामान्य रूप से मोक्स का उपयोग करना न्यायोचित है (आप सिर्फ नकल करते हैं कि वे सही काम कर रहे हैं; आप उन्हें परीक्षण नहीं करना चाहते हैं), लेकिन मॉकिटो.वर्इज़ () कॉल करना बहुत ही अच्छा है।
यदि आप व्हाइट-बॉक्स दृष्टिकोण का उपयोग कर रहे हैं तो आप वास्तव में क्या कर रहे हैं, आप अपनी इकाई के व्यवहार का परीक्षण कर रहे हैं । इस दृष्टिकोण में Mockito.verify () को कॉल करना आवश्यक है, आपको यह सत्यापित करना चाहिए कि आपकी इकाई जैसा आप उम्मीद कर रही है वैसा ही व्यवहार करती है।
ग्रे-बॉक्स-परीक्षण के लिए अंगूठे के नियम
सफेद बॉक्स परीक्षण के साथ समस्या यह है कि यह एक उच्च युग्मन बनाता है। एक संभव समाधान ग्रे-बॉक्स-परीक्षण करना है, न कि सफेद-बॉक्स-परीक्षण। यह ब्लैक एंड व्हाइट बॉक्स टेस्टिंग के संयोजन की तरह है। आप वास्तव में अपनी इकाई के व्यवहार का परीक्षण कर रहे हैं जैसे श्वेत-बॉक्स परीक्षण में, लेकिन सामान्य तौर पर आप इसे कार्यान्वयन-अज्ञेय बनाते हैं । जब यह संभव हो जाता है, तो आप ब्लैक-बॉक्स मामले की तरह एक चेक बना लेंगे, बस यह दावा करता है कि आउटपुट वही है जो आपके होने की उम्मीद है। तो, आपके प्रश्न का सार यह है कि यह कब संभव है।
यह वास्तव में कठिन है। मेरे पास एक अच्छा उदाहरण नहीं है, लेकिन मैं आपको उदाहरण दे सकता हूं। इस मामले में, जो कि बराबर () बनाम बराबर के साथ उल्लेख किया गया था (जैसे) आपको Mockito.verify () को कॉल नहीं करना चाहिए, बस आउटपुट का दावा करें। यदि आप ऐसा नहीं कर सकते, तो अपने कोड को छोटी इकाई तक तोड़ दें, जब तक आप ऐसा नहीं कर सकते। दूसरी ओर, मान लीजिए कि आपके पास कुछ @ सेवा है और आप @ वेब-सेवा लिख रहे हैं जो आपके @ सेवा पर अनिवार्य रूप से आवरण है - यह सभी कॉल @ सेवा (और कुछ अतिरिक्त त्रुटि से निपटने) को दर्शाता है। इस मामले में Mockito.verify () के लिए कॉल करना आवश्यक है, आपको अपने सभी चेक डुप्लिकेट नहीं करने चाहिए, जो आपने @Serive के लिए किए थे, यह सत्यापित करते हुए कि आप @Service को सही पैरामीटर सूची के साथ बुला रहे हैं, पर्याप्त है।