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