पिछली गर्मियों में मैं एक मूल ASP.NET/SQL सर्वर CRUD ऐप विकसित कर रहा था, और इकाई परीक्षण आवश्यकताओं में से एक था। जब मैंने डेटाबेस के खिलाफ परीक्षण करने की कोशिश की तो मैं कुछ परेशानी में भाग गया। मेरी समझ के लिए, इकाई परीक्षण किया जाना चाहिए:यूनिट-परीक्षण डेटाबेस
- राज्यविहीन
- एक दूसरे को
- repeatable से स्वतंत्र एक ही परिणाम यानी कोई निरंतर आ रही है बदलता है
ये आवश्यकताएं होने लगते हैं प्रत्येक के साथ अंतर पर साथ अन्य डेटाबेस के लिए विकास करते समय। उदाहरण के लिए, मैं पंक्तियों को डालने के लिए सुनिश्चित किए बिना सम्मिलित() का परीक्षण नहीं कर सकता हूं, इस प्रकार मुझे पहले हटाएं() को कॉल करने की आवश्यकता है। लेकिन, अगर वे पहले से ही नहीं हैं तो क्या होगा? तो मुझे पहले मौजूद() फ़ंक्शन को कॉल करने की आवश्यकता होगी।
मेरा अंतिम समाधान बहुत बड़े सेटअप फ़ंक्शंस (यक!) और एक खाली परीक्षण केस शामिल था जो पहले चलाएगा और इंगित करेगा कि सेटअप बिना किसी समस्या के चल रहा है। यह उनकी स्टेटलेसनेस बनाए रखते हुए परीक्षणों की आजादी पर बलिदान कर रहा है।
मुझे मिला एक और समाधान एक लेनदेन में फ़ंक्शन कॉल को लपेटना है जिसे आसानी से वापस ले जाया जा सकता है, जैसे Roy Osherove's XtUnit। यह काम, लेकिन इसमें एक और लाइब्रेरी, एक और निर्भरता शामिल है, और यह समस्या के समाधान के लिए बहुत अधिक भारी लगता है।
तो, इस स्थिति के साथ सामना करते समय एसओ समुदाय ने क्या किया है?
tgmdbm ने कहा:
आप आमतौर पर के लिए अपने पसंदीदा स्वचालित इकाई परीक्षण ढांचे का उपयोग एकीकरण परीक्षण प्रदर्शन है, जो क्यों कुछ लोग भ्रमित हो, लेकिन वे एक ही पालन नहीं करते नियम। आप को अपनी कई कक्षाओं (क्योंकि वे इकाई परीक्षण किए गए हैं) के कार्यान्वयन को शामिल करने की अनुमति है। आप का परीक्षण कर रहे हैं कि आपके कंक्रीट कक्षाएं डेटाबेस के साथ एक दूसरे के साथ बातचीत करती हैं और ।
तो अगर मैं इस सही ढंग से पढ़ा है, वहाँ वास्तव में प्रभावी रूप से इकाई परीक्षण एक डेटा एक्सेस परत करने के लिए कोई रास्ता नहीं है। या, डेटा एक्सेस लेयर का "यूनिट टेस्ट" डेटाबेस के साथ वास्तविक इंटरैक्शन से स्वतंत्र, वर्गों द्वारा जेनरेट किए गए SQL/कमांड परीक्षण, कहता है?