1.1 मॉकिटो लाइब्रेरी

आज हम उन्नत परीक्षण से परिचित होंगे। अधिक विशेष रूप से, मॉकिटो लाइब्रेरी के साथ । इस व्यवसाय से बाहर निकलने के बारे में सोचें भी नहीं।

सबसे पहले, यह लाइब्रेरी स्प्रिंग टेस्टिंग में एक मानक है । जो वास्तव में जावा बैकएंड डेवलपमेंट इंडस्ट्री में मानक है।

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

pom.xmlआप कोड का उपयोग करके मॉकिटो लाइब्रेरी को अपने साथ जोड़ सकते हैं:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

मॉकिटो प्रोजेक्ट के लिए संपूर्ण स्रोत कोड GitHub पर पाया जा सकता है ।

1.2 नकली वस्तुएं

तो यह मॉकिटो क्या है और यह इतना अच्छा क्यों है?

परीक्षण के विकास और विकास की प्रक्रिया में, वास्तविक वस्तु के बजाय कोड में किसी प्रकार के "स्टब" को खिसकाना बहुत आवश्यक था।

उदाहरण के लिए, डेटाबेस के साथ काम करने वाले कोड का परीक्षण किया जाता है और वहां कुछ बदलता है। यह अच्छा है कि प्रत्येक परीक्षण से पहले इस डेटाबेस की स्थिति समान होती है (अन्यथा परीक्षण अलग होंगे)। और मैं चाहूंगा कि इन राज्यों को जल्दी से वापस लाने के लिए आधार को सरल बनाया जाए।

या, उदाहरण के लिए, आप एक कोड का परीक्षण कर रहे हैं जो उपयोगी एसएमएस भेजता है। और डायरेक्ट मेलिंग के लिए वह किसी तरह के पेड एसएमएस गेटवे का इस्तेमाल करता है। कोड का परीक्षण करने के लिए इसमें कुछ वर्चुअल गेटवे को खिसकाना अच्छा होगा, ताकि समझ से बाहर लोगों को सैकड़ों एसएमएस न भेजें।

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

मुझे लगता है कि आप समझ गए हैं ... आभासी वस्तुएं, या जैसा कि उन्हें स्टब ऑब्जेक्ट भी कहा जाता है, एक बहुत ही उपयोगी चीज है।

और यहाँ कठिनाई आती है - जावा में स्थिर टाइपिंग है। ReadDatabaseइसका मतलब यह है कि किसी ऑब्जेक्ट को किसी प्रकार के ऑब्जेक्ट के बजाय एक चर के संदर्भ में असाइन करने के लिए VirtualDatabase, आपको कक्षा को इनहेरिट करने की आवश्यकता VirtualDatabaseहै RealDatabase

तब यह पता चलता है कि कक्षा में RealDatabaseनिजी विधियों और चर का एक समूह है जो अन्य वास्तविक वस्तुओं के संदर्भों को संग्रहीत करता है, और आप इस तरह से एक सामान्य स्टब नहीं लिख सकते। सिद्धांत रूप में यह अच्छा है, लेकिन व्यवहार में यह एक मरा हुआ अंत है।

और यहाँ बचाव के लिए आता है ( आपDynamicProxy अधिक विस्तार से पढ़ सकते हैं), जो जावा 5 में वापस दिखाई दिया। यह आपको आभासी वस्तुओं को बनाने की अनुमति देता है जिसके बारे में संकलक को कोई शिकायत नहीं है।

ऐसी आभासी वस्तुओं को मॉक कहा जाता है (मॉक - लेआउट शब्द से)। मॉकिटो लाइब्रेरी इन मॉक के साथ काम को अभूतपूर्व ऊंचाई तक ले जाने में सक्षम थी। इसलिए, वैसे, पुस्तकालय का नाम।

1.3 @ExtendWith एनोटेशन

Mockito लाइब्रेरी JUnit के साथ बहुत अच्छा काम करती है, इसे इसका विस्तार भी माना जा सकता है।

आपके यूनिट परीक्षणों में मॉकिटो लाइब्रेरी को सक्षम करने के दो तरीके हैं। पहला तरीका एक विशेष एनोटेशन जोड़ना है:

@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

दूसरा तरीका विधि को कॉल करके अपना काम सक्षम करना है openMocks():

public class MockitoAnnotationTest {
    @BeforeEach
    public void init() {
        MockitoAnnotations.openMocks(this);
   }
}

अधिकतर, आप पहला विकल्प देखेंगे, लेकिन कभी-कभी यह जानना उपयोगी होता है कि दूसरा भी है।