1.1 Mockito लायब्ररी
आज आपण प्रगत चाचणीशी परिचित होऊ. अधिक विशेषतः, Mockito लायब्ररीसह . या व्यवसायातून बाहेर पडण्याचा विचारही करू नका.
प्रथम, ही लायब्ररी स्प्रिंग चाचणीमध्ये एक मानक आहे . जे जावा बॅकएंड डेव्हलपमेंट इंडस्ट्रीमध्ये प्रत्यक्षात मानक आहे.
दुसरे म्हणजे, तुम्हाला तुमच्या स्प्रिंग कोडसाठी चाचण्या लिहाव्या लागतील . तुम्ही लिहिलेले बॅकएंड जसे पाहिजे तसे कार्य करते हे समजून घेण्याचा एकमेव मार्ग म्हणजे त्याच्या API च्या पद्धतींना कॉल करणे . आणि चाचण्यांसह हे करणे त्यांच्याशिवाय 10 पट सोपे आहे. तुम्हीच बघाल.
pom.xml
तुम्ही कोड वापरून तुमच्यामध्ये Mockito लायब्ररी जोडू शकता:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.2.0</version>
<scope>test</scope>
</dependency>
Mockito प्रकल्पासाठी संपूर्ण स्त्रोत कोड GitHub वर आढळू शकतो .
1.2 उपहासात्मक वस्तू
मग हे मॉकिटो काय आहे आणि ते इतके चांगले का आहे?
चाचणीच्या विकास आणि विकासाच्या प्रक्रियेत, बर्याचदा वास्तविक ऑब्जेक्टऐवजी कोडमध्ये काही प्रकारचे "स्टब" स्लिप करणे आवश्यक होते.
उदाहरणार्थ, डेटाबेससह कार्य करणारा कोड तपासला जातो आणि तेथे काहीतरी बदलतो. हे चांगले आहे की प्रत्येक चाचणीपूर्वी या डेटाबेसची स्थिती सारखीच असते (अन्यथा चाचण्या वेगळ्या असतील). आणि या राज्यांना त्वरीत परत आणण्यासाठी आधार अधिक सोपा असावा असे मला वाटते.
किंवा, उदाहरणार्थ, तुम्ही उपयुक्त SMS पाठवणाऱ्या कोडची चाचणी करत आहात. आणि थेट मेलिंगसाठी, तो काही प्रकारचे सशुल्क एसएमएस गेटवे वापरतो. कोडची चाचणी घेण्यासाठी त्यात काही व्हर्च्युअल गेटवे स्लिप करणे चांगले होईल, जेणेकरून न समजणाऱ्या लोकांना शेकडो एसएमएस पाठवू नयेत.
किंवा तुमचा कोड चाचणी सर्व्हरवर उपलब्ध नसलेल्या इतर वेब सर्व्हरकडून डेटाची विनंती करत आहे. किंवा तुम्ही ऑनलाइन पेमेंटसाठी एक कोड लिहा ज्याची 50 वेळा चाचणी करणे आवश्यक आहे आणि त्यानंतरच वास्तविक आर्थिक चॅनेलमध्ये वापरण्याची परवानगी आहे.
मला वाटते तुम्हाला समजले आहे... आभासी वस्तू किंवा त्यांना स्टब ऑब्जेक्ट्स असेही म्हणतात, ही एक अतिशय उपयुक्त गोष्ट आहे.
आणि इथे अडचण येते - Java मध्ये स्टॅटिक टायपिंग आहे. ReadDatabase
याचा अर्थ असा की ऑब्जेक्टचा संदर्भ प्रकाराच्या ऑब्जेक्ट ऐवजी व्हेरिएबलला नियुक्त करण्यासाठी VirtualDatabase
, तुम्हाला क्लास VirtualDatabase
कडून वारसा मिळणे आवश्यक आहे RealDatabase
.
मग असे दिसून आले की वर्गात RealDatabase
खाजगी पद्धती आणि व्हेरिएबल्सचा एक समूह आहे जो इतर वास्तविक वस्तूंचे संदर्भ संग्रहित करतो आणि आपण अशा प्रकारे सामान्य स्टब लिहू शकत नाही. सैद्धांतिकदृष्ट्या ते चांगले आहे, परंतु व्यवहारात ते एक मृत अंत आहे.
आणि येथे बचावासाठी येतो ( तुम्ही DynamicProxy
अधिक तपशीलवार वाचू शकता ), जे Java 5 मध्ये परत दिसले. हे तुम्हाला व्हर्च्युअल ऑब्जेक्ट्स तयार करण्यास अनुमती देते ज्याबद्दल कंपाइलरला कोणतीही तक्रार नाही.
अशा आभासी वस्तूंना मॉक (मोक या शब्दावरून - लेआउट) म्हणतात . मॉकिटो लायब्ररी या मॅक्ससह काम अभूतपूर्व उंचीवर नेण्यात सक्षम होती. म्हणून, तसे, ग्रंथालयाचे नाव.
1.3 @ExtendWith भाष्य
मोकीटो लायब्ररी JUnit सह उत्तम कार्य करते, हे अगदी त्याचा विस्तार मानले जाऊ शकते.
तुमच्या युनिट चाचण्यांमध्ये Mockito लायब्ररी सक्षम करण्याचे दोन मार्ग आहेत. पहिला मार्ग म्हणजे विशेष भाष्य जोडणे:
@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
...
}
दुसरा मार्ग म्हणजे पद्धत कॉल करून त्याचे कार्य सक्षम करणे openMocks()
:
public class MockitoAnnotationTest {
@BeforeEach
public void init() {
MockitoAnnotations.openMocks(this);
}
}
बहुतेकदा, तुम्हाला पहिला पर्याय दिसेल, परंतु काहीवेळा दुसरा पर्याय आहे हे जाणून घेणे उपयुक्त ठरते.
GO TO FULL VERSION