2.1 @ मॉक एनोटेशन

मॉकिटो में नकली वस्तुओं के साथ काम करने के दो तरीके हैं। पहला पूरी तरह से वर्चुअल ऑब्जेक्ट बनाना है , दूसरा मौजूदा ऑब्जेक्ट को रैपर में लपेटना है। आइए पहले वाले से शुरू करें।

पूरी तरह से आभासी वस्तु बनाने के लिए, आपको कोड लिखने की जरूरत है:

ClassName variable name = Mockito.mock(ClassName.class);

आइए एक उदाहरण के रूप में एक नकली ArrayList वर्ग बनाएँ:

@ExtendWith(MockitoExtension.class)
class MockTest {
    @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
        List mockList = Mockito.mock(ArrayList.class);
        //these methods won't do anything - they are stubs
        mockList.add("one");
        mockList.add("two");
    }
}

इस उदाहरण में, हम नकली ArrayList बनाते हैं और MockList चर में इसका संदर्भ संग्रहीत करते हैं। इस वस्तु के तरीके कुछ नहीं करते हैं।

वैसे, इस कोड को और भी छोटा लिखा जा सकता है, क्योंकि इसके लिए एक विशेष एनोटेशन है @Mock

@ExtendWith(MockitoExtension.class)
class MockTest {
    @Mock
    List mockList;

    @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
        //these methods won't do anything - they are stubs
        mockList.add("one");
        mockList.add("two");
    }
}

दूसरे मामले में, MockitoExtensionयह स्वयं क्लास कोड का विश्लेषण करेगा और आवश्यक स्टब्स बनाएगा। आपको विधि को कॉल करने की आवश्यकता नहीं है Mockito.mock()। एक एनोटेशन और वर्चुअल ऑब्जेक्ट तैयार है। सुंदरता।

2.2 @Spy एनोटेशन

मॉकिटो में दूसरी महत्वपूर्ण प्रकार की वस्तुएं मौजूदा वस्तुओं पर आवरण हैं। वे एक ओर, मौजूदा कक्षाओं का उपयोग करने की अनुमति देते हैं, और दूसरी ओर, ऐसी वस्तुओं के सभी तरीकों और चरों को कॉल को इंटरसेप्ट करने के लिए: जहां आवश्यक हो, अपने काम को सही करने के लिए। वे अक्सर नकली वस्तुओं के रूप में उपयोग किए जाते हैं।

किसी वस्तु पर आवरण बनाने के लिए, आपको कोड लिखने की आवश्यकता है:

ClassName variable name = Mockito.spy(an object);

ArrayList वर्ग के चारों ओर एक आवरण के साथ एक उदाहरण:

@ExtendWith(MockitoExtension.class)
class SpyTest {
    @Test
    public void whenMockAnnotation() {
        List<String> mockList = Mockito.spy(new ArrayList<String>());
        //these methods will work!
        mockList.add("one");
        mockList.add("two");
    }
}

अपने सरलतम रूप में, एक रैपर ऑब्जेक्ट के लिए एक कॉल केवल कॉल को मूल ऑब्जेक्ट पर रीडायरेक्ट करता है, जिसका संदर्भ वह अपने अंदर रखता है । सब कुछ मूल वस्तु की तरह ही काम करेगा।

आप एनोटेशन - का उपयोग करके एक रैपर भी बना सकते हैं @Spy

@ExtendWith(MockitoExtension.class)
class SpyTest {
    @Spy
    List mockList = new ArrayList<String>();

    @Test
    public void whenMockAnnotation() {
        // these methods will work!
        mockList.add("one");
        mockList.add("two");
    }
}

ये दो कोड उदाहरण समतुल्य हैं।