यह #Hacktoberfest के हिस्से के रूप में अधिक OSS डेवलपर्स तक पहुंचने की आशा के साथ मीडियम.कॉम पर मेरे लेख का पुनः पोस्ट है।
क्या आपको कभी परतदार समानांतर परीक्षणों से जूझना पड़ा है जो अधिकांश समय तो पास हो जाते हैं लेकिन फिर अचानक असंगत यादृच्छिक त्रुटियों के साथ विफल होने लगते हैं? क्या आपको कभी उन परीक्षणों को ठीक करना पड़ा है जो समान संसाधन फ़ाइलों को साझा करते हैं और उन्हें आपके और आपके अन्य परीक्षणों के परिणामों को भ्रमित करने के लिए समानांतर रूप से संशोधित करना पड़ा है? क्या आपने ऐसे कोड को दोबारा तैयार करने की कोशिश में अनगिनत रातें बिताई हैं ताकि इसे उचित रूप से समानांतर किया जा सके और प्रतिलिपि प्रस्तुत करने योग्य और गारंटीकृत परिणाम प्राप्त हो सकें?
यह एक जटिल विषय है जिसे हल करना हमेशा आसान नहीं होता है, खासकर मौजूदा बड़े कोड बेस में। हालाँकि, नियमों के एक सरल सेट का पालन करने से आपको वहां पहुंचने में मदद मिल सकती है और कार्लस्प्रिंग/आइडेम्पोटेंस फ्रेमवर्क का लक्ष्य इसमें मदद करना है।
परीक्षणों को हर समय पुनरुत्पादित करने के लिए, आपको यह सुनिश्चित करना होगा कि उनकी संसाधन फ़ाइलें केवल उन्हीं तक समाहित और पृथक हैं। इसका मतलब यह है कि प्रत्येक परीक्षण के पास विशेष रूप से अपने परीक्षण संसाधन होने चाहिए और अन्य परीक्षणों को उन्हें संशोधित नहीं करना चाहिए।
परीक्षण निष्क्रियता का अर्थ है कि आपके परीक्षण हमेशा समान परिणाम देंगे। इससे कोई फर्क नहीं पड़ता कि उन्हें कितनी बार निष्पादित किया गया है और इससे कोई फर्क नहीं पड़ता कि अन्य परीक्षण समानांतर में चल रहे हैं।
यह एक हल्का ढांचा है जो आपके JUnit5 परीक्षणों के लिए परीक्षण संसाधन फ़ाइलों को अलग तरीके से परिभाषित करने और कॉपी करने में मदद करता है। परीक्षण संसाधनों को एनोटेशन का उपयोग करके परिभाषित किया गया है और परीक्षण संसाधन पृथक्करण और अलगाव के कार्यान्वयन में सहायता के लिए उनकी अपनी निर्देशिकाओं में कॉपी किया गया है।
सभी सामान्य परीक्षण संसाधन हमेशा की तरह src/test/resource निर्देशिका के अंतर्गत संग्रहीत किए जाते हैं। प्रत्येक परीक्षण विधि @TestResources एनोटेशन का उपयोग करके आवश्यक संसाधनों को परिभाषित करती है। फ़्रेमवर्क इन संसाधनों को प्रत्येक परीक्षण विधि के लिए एक अलग निर्देशिका में कॉपी करता है। यह सुनिश्चित करता है कि उसके पास आवश्यक संसाधनों तक विशेष पहुंच है, जिससे समान परीक्षण वर्ग में अन्य परीक्षण विधियों सहित समानांतर में चल रहे अन्य परीक्षणों के हस्तक्षेप को रोका जा सके।
प्रत्येक बिल्ड टूल के लिए, एक अलग निर्भरता होती है जिसमें उस टूल के विशिष्ट निर्देशिका लेआउट के लिए पथ-संबंधित परिवर्तन तर्क शामिल होता है। (अन्य बातों के अलावा, एक बहुत ही सरल उदाहरण के रूप में। मेवेन निर्मित कोड को लक्ष्य के अंतर्गत रखता है, जबकि ग्रैडल इस उद्देश्य के लिए बिल्ड का उपयोग करता है; संसाधनों को अलग तरीके से रखा जाता है, आदि)। इस पर अधिक जानकारी नीचे दी जाएगी।
यहां वे चरण हैं जिनकी आपको शुरुआत करने के लिए आवश्यकता होगी।
आपको अपने बिल्ड टूल के लिए संबंधित निर्भरता को परिभाषित करने की आवश्यकता होगी। आप यहां देख सकते हैं कि नवीनतम रिलीज़ संस्करण क्या है।
testImplementation "org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3"
testImplementation("org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3")
org.carlspring.testing.idempotence idempotence-maven 1.0.0-rc-3 test
आपकी टेस्ट क्लास को @ExtendWith(TestResourceExtension.class) एनोटेशन के साथ एनोटेट करना होगा। यह एनोटेशन संसाधनों की वास्तविक प्रतिलिपि के लिए ज़िम्मेदार है।
आपको उन संसाधनों को निर्दिष्ट करने के लिए @TestResources एनोटेशन के साथ अपनी परीक्षण विधियों को भी एनोटेट करना होगा जिनकी उन्हें आवश्यकता है।
उदाहरण के लिए:
package com.foo; import org.carlspring.testing.idempotence.annotation.TestResource; import org.carlspring.testing.idempotence.annotation.TestResources; import org.carlspring.testing.idempotence.extension.TestResourceExtension; @ExtendWith(TestResourceExtension.class) class MyTest { @Test @TestResources({ @TestResource(source = "classpath:/foo.txt"), @TestResource(source = "classpath*:/**/bar.txt")} ) void testFoo() { // Perform whatever checks you need using these resources } }
प्रत्येक परीक्षण विधि के लिए निम्नलिखित प्रारूप का उपयोग करके एक निर्देशिका बनाई जाएगी:
build/test-resources/MyTest-testFoo/nested/dir/foo.txt build/test-resources/MyTest-testFoo/bar.txt
target/test-resources/MyTest-testFoo/nested/dir/foo.txt target/test-resources/MyTest-testFoo/bar.txt
इस तरह आपके परीक्षणों में वे संसाधन होंगे जिनकी उन्हें अपनी पृथक निर्देशिकाओं में प्रतिलिपि बनाने की आवश्यकता है। इस बिंदु पर आप इन परीक्षण संसाधनों को उन परीक्षण विधियों से संशोधित कर सकते हैं जिनसे वे संबंधित हैं और आपके परिणाम निष्क्रिय होने चाहिए, बशर्ते कि वे केवल फ़ाइल आधारित संसाधनों पर निर्भर हों, न कि अन्य प्रकार के साझा संसाधनों (डेटाबेस, तृतीय-पक्ष सेवाओं, आदि) पर।
इडेम्पोटेंस परियोजना का दस्तावेज़ीकरण यहां पाया जा सकता है।
चीजें कैसे काम करती हैं, इसकी अधिक विस्तृत व्याख्या के लिए आप वैचारिक अवलोकन पर एक नज़र डाल सकते हैं।
यह मुख्य कार्यक्षमता और बुनियादी ढांचे के साथ एक ग्रीनफील्ड प्रोजेक्ट है, लेकिन मदद का हमेशा स्वागत है।
जिन योगदानकर्ताओं के पास JUnit, Springframework, MkDocs का अनुभव है, वे कुछ बेहतरीन विचारों और समाधानों के साथ परियोजना को आकार देने में मदद कर सकते हैं। शुरुआती अपनाने वाले जो प्रतिक्रिया दे सकते हैं उनका भी बहुत स्वागत है!
हैकटोबरफेस्ट या सहायता वांछित लेबल वाले मुद्दे ध्यान देने योग्य हैं और इनसे आपको जल्दी शुरुआत करने में मदद मिलेगी। आप उन्हें यहां पा सकते हैं।
परीक्षण मामले लिखते समय सबसे महत्वपूर्ण चीजों में से एक परीक्षण डेटा है जिसका उपयोग आपके परीक्षण करेंगे और इसे रनों के बीच संतुलित रखना होगा। इस डेटा को अपने परीक्षणों के बीच अलग रखने के लिए सरल नियमों के एक सेट का पालन करके, आप अपने परिणामों की निष्क्रियता और विश्वसनीयता प्राप्त कर सकते हैं।
कार्लस्प्रिंग/इडेम्पोटेंस परियोजना उपयोग में आसान ढांचा प्रदान करती है जो ग्रीनफील्ड परियोजनाओं और रीफैक्टरिंग विरासत दोनों के लिए उपयुक्त है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3