java - एक ही कक्षा में नकली तरीकों




unit-testing mocking (2)

Mockito दस्तावेज़ीकरण से निम्न नोट करें:

Mockito पारित वास्तविक उदाहरण के लिए कॉल का प्रतिनिधित्व नहीं करता , बजाय यह वास्तव में इसके एक प्रति बनाता है इसलिए यदि आप वास्तविक उदाहरण रखें और इसके साथ बातचीत करें तो उम्मीद न करें कि जासूसी उन इंटरैक्शन के बारे में पता करें और उनके वास्तविक उदाहरण पर प्रभाव। परिणाम यह है कि जब एक अनस्टब्ड विधि को जासूस पर बुलाया जाता है, लेकिन वास्तविक उदाहरण पर नहीं , तो आपको वास्तविक उदाहरण पर कोई प्रभाव नहीं दिखाई देगा।

यह आपकी स्थिति के लिए विशेष रूप से संदर्भित है। आप temp को संदर्भित करते हैं और फिर अपनी methodA कॉल करते हैं methodA Mockito बिल्कुल उस घटना पर जासूसी नहीं कर रहा है; यह spyTemp पर जासूसी है इसलिए सामान्य methodB को कहा जाता है।

ध्यान दें कि आपको आंशिक रूप से नए कोड के लिए नकल से बचना चाहिए।

मैं एक ही कक्षा में एक विधि का नकली करने के लिए मोकीटो का उपयोग कर रहा हूं जिसके लिए मैं परीक्षण लिख रहा हूं। मैंने इतने सारे उत्तर ( एक ही कक्षा में विधि का मजाक ) पर देखा है, लेकिन शायद मैं उन्हें गलत समझ रहा हूं, क्योंकि मैं मुद्दों में चल रहा हूं।

 class Temp() {

    public boolean methodA(String param) {

         try {

             if(methodB(param))
                   return true;

             return false;
         } catch (Exception e) {
               e.printStackTrace();
         }
    }
 }

मेरी परीक्षा विधि:

 @Test
 public void testMethodA() {

    Temp temp = new Temp();
    Temp spyTemp = Mockito.spy(temp);

    Mockito.doReturn(true).when(spyTemp).methodB(Mockito.any()); 
    boolean status = temp.methodA("XYZ");

    Assert.assertEquals(true, status);
 }

मुझे हालांकि एक्सपेक्शन का प्रिंट आउट मिलता है क्योंकि methodB की परिभाषा निष्पादित हो जाती है। मेरी समझ methodB की परिभाषा है spyTemp का उपयोग करके मजाक उड़ाया जाएगा। हालांकि यह मामला नहीं दिखाई देता है।

क्या कोई कृपया समझा सकता है कि मैं गलत कहां जा रहा हूं?


आपने एक जासूस बनाया और methodB() वह सही है! लेकिन आप मूल वस्तु पर methodA() कहा जाता है। सही परिणाम प्राप्त करने के लिए इसे जासूसी पर कॉल करें

boolean status = spyTemp.methodA("XYZ");




mockito