top 12 mockito interview questions
मॉकिटो मॉकिंग इंटरव्यू को क्रैक करने के लिए अक्सर पूछे जाने वाले मॉकिटो साक्षात्कार प्रश्न:
हमारे पिछले ट्यूटोरियल में, हमने सीखा मॉकिंग के निजी, स्थिर और शून्य तरीके । के माध्यम से पढ़ें Mockito पर पूरा प्रशिक्षण ट्यूटोरियल मॉकिटो ढांचे की स्पष्ट समझ के लिए।
इस लेख में मॉकिटो मॉकिंग ढांचे पर सबसे अधिक पूछे जाने वाले विशिष्ट साक्षात्कार प्रश्न शामिल हैं।
प्रत्येक डेवलपर या QA से अपेक्षा की जाती है कि वह आसानी से सबसे सफ़ेद बॉक्स परीक्षण (या यूनिट परीक्षण) लिखने के लिए और अनुप्रयोग में उन्नत कोड कवरेज और अधिक आत्मविश्वास के लिए निर्भरता का मज़ाक बनाने के लिए Mocking मूल बातें जान ले।
विस्तृत उत्तर के साथ सबसे लोकप्रिय मॉकिटो साक्षात्कार प्रश्न
नीचे सूचीबद्ध मॉकिंग फ्रेमवर्क पर सबसे अधिक पूछे जाने वाले प्रश्न हैं।
क्यू # 1) हमें मॉकिंग की आवश्यकता क्यों है?
उत्तर: नकल के कई उपयोग मामले हैं जो अलगाव के तहत कोड के यूनिट परीक्षण में सहायता करते हैं और परीक्षण को अत्यधिक दोहराने योग्य और पूर्वानुमान योग्य बनाते हैं।
आमतौर पर जब मॉकिंग की आवश्यकता होती है:
सेवा मेरे) परीक्षण के तहत घटक पर निर्भरताएं हैं जो अभी तक लागू नहीं हुई हैं या कार्यान्वयन प्रगति पर है।
एक अच्छा उदाहरण एक REST API एंडपॉइंट हो सकता है जो बाद में किसी समय में उपलब्ध होगा, लेकिन आपने इसे एक निर्भरता के माध्यम से कोड में खा लिया है।
अब जैसा कि वास्तविक कार्यान्वयन अभी भी उपलब्ध नहीं है, आप वास्तव में उस एपीआई की अपेक्षित प्रतिक्रिया के बारे में अधिकांश समय जानते हैं। मोक्स आपको उन प्रकार के एकीकरण का परीक्षण करने की अनुमति देता है।
बी) घटक सिस्टम में स्थिति को अद्यतन करता है।
उदाहरण: DB कॉल - आप अपने DB को डेटा के साथ अपडेट नहीं करना चाहेंगे जो सिर्फ परीक्षण उद्देश्यों के लिए है। इसके परिणामस्वरूप डेटा को दूषित किया जा सकता है, परीक्षण के निष्पादित होने पर DB की उपलब्धता एक और चुनौती है।
इस प्रकार इस तरह के व्यवहार से बचने के लिए, परीक्षण के तहत घटक में डीबी कॉल का मजाक उड़ाया जा सकता है। इसलिए परीक्षण के तहत डीबी और घटक का कोई प्रत्यक्ष युग्मन नहीं है।
क्यू # 2) doReturn और फिर पुनर्नवा के बीच अंतर।
उत्तर: मॉकिटो स्टब्स बनाने के लिए दो अलग-अलग सिंटैक्स प्रदान करता है जैसे:
- doReturn और फिर पुनर्जन्म
- सुखदायक (तब नहीं सुखदायक)
- doThrow और उसके बाद
ये दोनों तरीके सेटअप स्टब्स हैं और इनका उपयोग / सेटअप स्टब्स बनाने के लिए किया जा सकता है और इनका इस्तेमाल कई बार किया जा सकता है।
आसान एमपी 3 डाउनलोडर मुफ्त डाउनलोड पूर्ण संस्करण
तो ये दोनों अलग कैसे हैं?
सेवा मेरे) स्टबिंग का तत्कालीन रीटर्न तरीका स्टब्स स्थापित करने का एक सुरक्षित तरीका है। इसका अनिवार्य रूप से मतलब यह है कि यह रिटर्न प्रकारों के खिलाफ एक संकलन-समय की जांच करता है जिसे आप भी स्टब करना चाहते हैं।
इसे एक उदाहरण से समझते हैं:
एक विधि मान लें getItemDetails पर mockedItemService जो किसी प्रकार की वस्तु लौटाता है आइटमस्कू। के साथ तत्पश्चात, आप ItemSku के अलावा और कुछ भी वापस नहीं कर पाएंगे लेकिन doReturn के साथ, आप कुछ भी वापस करने के लिए स्टब सेट कर सकते हैं और निष्पादन के दौरान परीक्षण विफल हो जाएगा (या एक अपवाद फेंक)।
// काम करता है
when (mockedItemService.getItemDetails(123)).thenReturn(new ItemSku());
// समय संकलन को फेंकता है
when (mockedItemService.getItemDetails(123)).thenReturn(expectedPrice);
// doReturn के साथ, दोनों स्टब सेटअप काम करता है क्योंकि यह सुरक्षित नहीं है।
// यहाँ हम टाइप डबल के एक ऑब्जेक्ट को वापस करने की कोशिश कर रहे हैं जो अभी भी काम करता है और किसी भी संकलन समय की चेतावनी नहीं देता है।
doReturn (expectedPrice).when(mockedItemService.getItemDetails(123)); doReturn (new ItemSku()).when(mockedItemService.getItemDetails(123));
बी) स्टब के लिए इन 2 तरीकों के बीच एक और महत्वपूर्ण अंतर नकली वस्तुओं के लिए है, संकलन सुरक्षा के अलावा बहुत अंतर नहीं है।
हालांकि स्पाईड ऑब्जेक्ट्स के लिए, 'तत्पश्चात' प्रकार का स्टब सेटअप काम नहीं करेगा, क्योंकि यह वास्तविक विधि को कॉल करने में परिणाम देगा, इससे पहले कि स्टब की गई प्रतिक्रिया कॉल के रूप में वापस आ जाए और मॉक पर नहीं, लेकिन स्पाई पर जो एक वास्तविक ऑब्जेक्ट उदाहरण को लपेट रहा है ।
तो मान लीजिए, एक जासूस का नाम है spiedObject और इसमें एक मेथड टेस्टमेथोड है जो एक पूर्णांक लौटाता है, फिर इस पर एक स्टब सेटअप करने के लिए आपको तत्पश्चात रीटर्न के बजाय डॉटरनेट का उपयोग करना होगा।
doReturn (10).when(spiedObject.testMethod());
Q # 3) जासूस का इस्तेमाल कब और क्यों किया जाना चाहिए?
उत्तर: स्पाई एक प्रकार का आंशिक मॉक है जो मॉकिटो द्वारा समर्थित है।
यह अनिवार्य रूप से एक प्रकार का उदाहरण है जहां:
सेवा मेरे) जब कोई मॉक सेटअप नहीं किया जाता है, तो वास्तविक तरीकों को कॉल करने में जासूस के परिणामों पर कोई बातचीत होती है। लेकिन यह अभी भी आपको जासूसी वस्तु के साथ बातचीत को सत्यापित करने की अनुमति देता है - जैसे कि वास्तव में एक विधि कहा जाता था, कितनी बार विधि को बुलाया गया था, क्या तर्क थे जिनके उपयोग से विधि कहा जाता था आदि।
बी) यह आपको आंशिक नकली सेट करने के लिए लचीलापन देता है।
उदाहरण के लिए, अगर आपके पास 2 विधियाँ हैं - Method1 और method2 और आप चाहते हैं कि method1 को बुलाया जाए और method2 को मॉक किया जाए। जासूस इस तरह का सेटअप प्रदान करते हैं।
तो, सरल शब्दों में एक मॉक और स्टब के बीच का अंतर है - एक मॉक एक प्रकार से बनाया गया है न कि एक उदाहरण से, जबकि एक स्टब वर्ग वस्तु के वास्तविक उदाहरण को लपेटता है।
Q # 4) Mockito का उपयोग करके स्थैतिक तरीकों का मजाक क्यों नहीं उड़ाया जा सकता है?
कार्य सी + + के लिए अपरिभाषित संदर्भ
उत्तर: स्टैटिक विधियाँ कक्षा से ही जुड़ी होती हैं, न कि किसी विशेष वर्ग की। इसका मतलब यह है कि कक्षा के सभी उदाहरण / वस्तुएं स्थिर विधि के समान उदाहरण का उपयोग करते हैं।
स्टैटिक विधियां प्रक्रियात्मक कोड की तरह अधिक होती हैं और ज्यादातर सामान्य रूप से विरासत प्रणालियों में उपयोग की जाती हैं।
नकली पुस्तकालय आमतौर पर या तो इंटरफेस के माध्यम से या इंटरफेस के माध्यम से या वंशानुक्रम के माध्यम से नकली बनाते हैं और स्थैतिक विधि किसी भी विशेष उदाहरण के साथ संबद्ध नहीं होती है जो मॉकिटो फ्रेमवर्क (जैसे कि मॉकिटो, आसान मॉक, आदि) के लिए स्टिक विधियों को मॉक करना संभव नहीं है।
पॉवरमॉक जैसे फ्रेमवर्क जिसमें स्टैटिक विधियों का समर्थन होता है, स्टैटिक विधियों को मॉक करने के लिए रनटाइम पर बाइटकोड हेरफेर करते हैं।
Q # 5) यह सत्यापित करने की आवश्यकता क्या है कि नकली कहा गया था?
उत्तर: एक नकली वस्तु (या एक जासूसी उदाहरण) पर एक स्टब स्थापित करना यह गारंटी नहीं देता है कि स्टब किए गए सेटअप को भी लागू किया गया था या नहीं।
'सत्यापन' मिलान करने वाले, यह पुष्टि करने के लिए एक सुविधा देते हैं कि जो स्टब स्थापित किया गया था वह वास्तव में आह्वान किया गया था या नहीं, कितनी बार कॉल किया गया था, तर्कों को किस विधि से बुलाया गया था, आदि।
संक्षेप में, यह हमें परीक्षण सेटअप और अपेक्षित परिणाम को अधिक मजबूत तरीके से सत्यापित करने की अनुमति देता है।
Q # 6) एक अच्छा परीक्षण योग्य कोड क्या है?
उत्तर:
परीक्षण योग्य कोड के बारे में कुछ बिंदु (जिसका अर्थ है कि आसानी से परीक्षण की गई इकाई हो सकती है) में शामिल हैं:
- निर्भरता या तंग युग्मन की कम संख्या - उदाहरण: सीधे निर्भरता के बजाय निर्भरता को इंजेक्ट किया जाना चाहिए।
- कोड जो SRP (एकल जिम्मेदारी सिद्धांत) का पालन करता है - इसका अनिवार्य रूप से मतलब है कि वर्ग में परिवर्तन के कई कारण नहीं होने चाहिए। एसआरपी का पालन खुद पर निर्भरता पैदा करने वाली कक्षाओं से बचता है और कोड को सुसंगत और साफ रखता है।
- स्थिर विधियों और अंतिम कक्षाओं का कम / न्यूनतम उपयोग - ये आम तौर पर कोड स्मेल का संकेत देते हैं और ज्यादातर विरासत कोड से जुड़े होते हैं।
Q # 7) मॉकिटो की सीमाएँ क्या हैं?
उत्तर: मॉकिटो जावा आधारित परियोजनाओं में से अधिकांश के लिए पसंद का एक ढांचा है। इसे लागू करना, पढ़ना और समझना आसान है।
कार्यक्षमता के मामले में कुछ कमियां या सीमाएँ हैं:
- स्थैतिक तरीकों का मजाक उड़ाने में इसकी असमर्थता।
- कंस्ट्रक्टर्स, प्राइवेट मेथड्स और फाइनल क्लासेस का मजाक नहीं उड़ाया जा सकता।
Q # 8) कौन से ढांचे निजी और स्थैतिक तरीकों का समर्थन कर सकते हैं?
उत्तर: पावरमॉकिटो (मॉकिटो फ्रेमवर्क के एक्सटेंशन), जेमॉकिट आदि जैसे फ्रेमवर्क निजी और स्थैतिक तरीकों का मजाक उड़ाते हैं।
Q # 9) जावा 8 में इंटरफेस में मॉकिंग / स्टबिंग डिफॉल्ट तरीके।
उत्तर: इंटरफ़ेस में जावा 8 के डिफ़ॉल्ट तरीकों के कार्यान्वयन के साथ, मॉकिटो ऐसे डिफ़ॉल्ट तरीकों का मजाक उड़ाने के लिए आउट ऑफ बॉक्स सपोर्ट प्रदान करता है। (कृपया ध्यान दें कि यह समर्थन मॉकिटो 2 के बाद से पेश किया गया था)।
इन तरीकों को क्लास या इंटरफ़ेस के किसी भी अन्य तरीकों की तरह मज़ाक / ठूंसा जा सकता है।
Q # 10) मॉकिटो में स्टब इनवोकेशन के आदेश को कैसे सत्यापित किया जा सकता है?
उत्तर: जब आप उस आदेश को सत्यापित करना चाहते हैं जिसमें मॉक को बुलाया गया था, तो मॉकिटो का ' क्रम में “इंटरफ़ेस का उपयोग किया जा सकता है।
परीक्षण के दौरान, आपको बस एक इनवर्टर ऑब्जेक्ट को सेटअप / बनाना होगा, मॉक ऑब्जेक्ट्स की एक सूची को नीचे सूचीबद्ध करना होगा, जिस पर मोक्स के क्रम का पता लगाने की आवश्यकता है (यदि एक ही मॉक पर कई तरीके हैं और कोई अन्य मॉक नहीं है जिसकी आवश्यकता है यह सत्यापित करने के लिए कि केवल एक बार नकली वर्ग का उल्लेख करना पर्याप्त है)।
नीचे दिए गए परीक्षण पर विचार करें जो InOrder की एक वस्तु को परिभाषित करता है और mockDatabaseImpl की 2 घटनाओं का उल्लेख करता है
@Test public void calculateSumAndStore_withValidInput_verifyMockOrder() { // Arrange studentScores = new StudentScoreUpdates(mockDatabaseImpl); int[] scores = {60,70,90}; Mockito.doNothing().when(mockDatabaseImpl).updateScores(anyString(), anyInt()); Mockito.doReturn('A').when(mockDatabaseImpl).getGrade(anyInt()); InOrder inorder = inOrder(mockDatabaseImpl); // Act studentScores.calculateSumAndStore('Student1', scores); // Assert inorder.verify(mockDatabaseImpl).updateScores(anyString(),anyInt()); inorder.verify(mockDatabaseImpl).getGrade(anyInt()); }
इसके अलावा, संदर्भ के लिए, परीक्षण के तहत विधि के कोड को सूचीबद्ध करना परीक्षण निष्पादन के आदेश को समझने में मददगार होगा:
public void calculateSumAndStore(String studentId, int[] scores) { int total = 0; for(int score : scores) { total = total + score; } // write total to DB databaseImpl.updateScores(studentId, total); databaseImpl.getGrade(total); }
जैसा कि ऊपर देखा गया है, databaseImpl पहले अपडेट को कॉल करता है और फिर getGrade को कॉल करता है।
इसलिए, यदि आप इसके लिए मॉकिटो का उपयोग करके एक यूनिट टेस्ट लिख रहे हैं, और आपको डेटाबेसआईएमपीएल पर कॉल के क्रम को सुनिश्चित करने की आवश्यकता है, तो परीक्षण कोड देखें और सुनिश्चित करें कि अपेक्षानुसार ऑर्डर किए गए हैं।
उपर्युक्त उदाहरण में, यदि मैं अभ्रक के क्रम को बदल देता हूं, तो यह 'VerificationInOrderFailure' के अपवाद के साथ परीक्षण को विफल कर देगा।
मुखर क्रम बदलने के बाद, कोड नीचे दिखाया गया है:
@Test public void calculateSumAndStore_withValidInput_verifyMockOrder() { // Arrange studentScores = new StudentScoreUpdates(mockDatabaseImpl); int[] scores = {60,70,90}; Mockito.doNothing().when(mockDatabaseImpl).updateScores(anyString(), anyInt()); Mockito.doReturn('A').when(mockDatabaseImpl).getGrade(anyInt()); InOrder inorder = inOrder(mockDatabaseImpl); // Act studentScores.calculateSumAndStore('Student1', scores); // Assert inorder.verify(mockDatabaseImpl).updateScores(anyString(),anyInt()); inorder.verify(mockDatabaseImpl).getGrade(anyInt()); }
उपरोक्त परीक्षण निष्पादन प्रकार के साथ एक अपवाद फेंकता है:
'VerificationInOrderFailure' org.mockito.exception.verification.VerificationInOderderailail:
क्रम विफलता में सत्यापन
वांटेड लेकिन आमंत्रित नहीं:
mockDatabaseImpl.updateScores (
isA (java.lang.String),
isA (java.lang.Integer)
Q # 11) लगातार मेथड कॉल के खिलाफ कई मान लौटाता है
उत्तर: एक ही ठूंठदार विधि के कई चालानों के लिए विभिन्न मूल्यों को वापस करने के लिए, मॉकिटो नीचे दिए गए अनुसार 3 दृष्टिकोण प्रदान करता है:
सेवा मेरे) अलग किए गए अल्पविराम का उपयोग करना: यह तत्कालीन पुनरावृत्ति के साथ काम करता है।
उदाहरण के लिए , उपरोक्त कोड का नमूना लेते हुए, हमें विधि के लिए लगातार स्टब सेटअप करने की कोशिश करते हैं - getGrade जो पुनरावृत्तियों के अनुक्रम के आधार पर विभिन्न मूल्यों को लौटाएगा:
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A','B', 'C');
इसका मतलब यह है कि जब गेटग्रेड विधियों को परीक्षण के तहत विधि में बुलाया जाता है, तो पहला आह्वान 'ए' लौटाएगा, दूसरा आह्वान 'बी' और इतने पर वापस आ जाएगा।
बी) लगातार तत्पश्चात: यह एक दृष्टिकोण है जो तत्कालीन बयानों के साथ जंजीर है। जंजीर कॉल को उसी उदाहरण पर लागू करना जैसा कि नीचे दिखाया गया है।
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A').thenReturn('B').thenReturn('C');
ग) लगातार काम: अंतिम दृष्टिकोण ऊपर के रूप में जंजीर प्रारूप में doReturn का उपयोग कर रहा है।
doReturn ('A').doReturn('B').doReturn('C').when(mockDatabaseImpl).getGrade( anyInt ())
Q # 12) विभिन्न प्रकार के मॉकिंग फ्रेमवर्क क्या हैं और वे कैसे काम करते हैं?
उत्तर: मॉकिंग ढांचे के प्रकार और वे कैसे काम करते हैं, नीचे समझाया गया है।
मोटे तौर पर मॉकिंग फ्रेमवर्क की 2 श्रेणियां हैं:
- प्रॉक्सी आधारित - उदाहरण, मॉकिटो, ईज़ीमॉक आदि।
- बायोटेक आधारित है - उदाहरण, PowerMock, JMockit, आदि।
आइए इन दोनों रूपरेखाओं की विभिन्न मापदंडों पर तुलना करें।
विंडोज़ के लिए सर्वश्रेष्ठ वर्चुअलाइजेशन सॉफ्टवेयर 10
प्रॉक्सी आधारित है | बायोटेक आधारित है | |
---|---|---|
सरलता से | अधिक सरल और प्रयोग करने में आसान | इसमें जटिल नकली सेटअप तर्क शामिल हो सकते हैं |
निर्माण की विधि | एक प्रॉक्सी या नकली वस्तु जिसे वास्तव में वर्ग / इंटरफ़ेस के उदाहरण की आवश्यकता नहीं होती है | इसमें अनिवार्य रूप से ऑब्जेक्ट्स बनाना और रनटाइम पर मॉकडाउन / स्टब्ड व्यवहार के लिए इंस्टेंस को हेरफेर करना शामिल है |
कार्यक्षमता | मॉकिंग क्लासेस और इंटरफेस | कक्षाओं और इंटरफेस के अलावा, स्थैतिक तरीकों, अंतिम कक्षाओं आदि का मजाक उड़ाने की अनुमति देता है |
जावा निर्भरता | बहुत कसकर जावा संस्करणों के लिए युग्मित नहीं है | चूंकि इन रूपरेखाओं में बायटेकोड हेरफेर शामिल है, वे कसकर युग्मित हैं और जावा संस्करणों में पीछे / आगे संगत नहीं हो सकते हैं। |
उदाहरण | मॉकिटो, ईज़ीमॉक आदि। | पॉवरमॉक, जेमॉकिट आदि। |
निष्कर्ष
इस लेख में शामिल सामग्री मॉकिंग रूपरेखा और विशेष रूप से मॉकिटो साक्षात्कार की तैयारी के आसपास बुनियादी चर्चा का कार्य करती है।
कवर किए गए प्रश्नों की सैद्धांतिक समझ प्राप्त करने के अलावा, वास्तविक कोड उदाहरणों को भी करने की कोशिश करनी चाहिए जो इन रूपरेखाओं को अधिक मजेदार और दिलचस्प बनाता है।
आशा है, आपने इस मॉकिटो श्रृंखला में ट्यूटोरियल की पूरी श्रृंखला का आनंद लिया।
हैप्पी लर्निंग।
PREV ट्यूटोरियल | सबसे पहले ट्यूटोरियल
अनुशंसित पाठ
- साक्षात्कार प्रश्न और उत्तर
- मॉकिटो ट्यूटोरियल: यूनिट टेस्टिंग में मॉकिंग के लिए मॉकिटो फ्रेमवर्क
- कुछ दिलचस्प सॉफ्टवेयर परीक्षण साक्षात्कार प्रश्न
- ईटीएल परीक्षण साक्षात्कार प्रश्न और उत्तर
- शीर्ष ओरेकल फॉर्म और रिपोर्ट साक्षात्कार प्रश्न
- अनुभवी पेशेवरों के लिए सॉफ्टवेयर मैनुअल परीक्षण साक्षात्कार प्रश्न
- शीर्ष ओरेकल ऐप तकनीकी और ओरेकल SOA साक्षात्कार प्रश्न
- 25 सर्वश्रेष्ठ चुस्त परीक्षण साक्षात्कार प्रश्न और उत्तर