मैं बहुत सारे वेब एप्लिकेशन के साथ काम करता हूं जो बैकएंड पर बदलती जटिलता के डेटाबेस द्वारा संचालित होते हैं। आमतौर पर, व्यापार और प्रस्तुति तर्क से अलग एक ORM परत होती है। यह व्यावसायिक तर्क को इकाई-परीक्षण को काफी सरल बनाता है; चीजों को असतत मॉड्यूल में लागू किया जा सकता है और परीक्षण के लिए आवश्यक किसी भी डेटा को ऑब्जेक्ट मॉकिंग के माध्यम से नकली किया जा सकता है।
लेकिन ओआरएम और डेटाबेस का परीक्षण करना हमेशा समस्याओं और समझौता से भरा रहा है।
इन वर्षों में, मैंने कुछ रणनीतियों की कोशिश की है, जिनमें से किसी ने भी मुझे पूरी तरह से संतुष्ट नहीं किया है।
ज्ञात डेटा के साथ एक परीक्षण डेटाबेस लोड करें। ओआरएम के खिलाफ परीक्षण चलाएं और पुष्टि करें कि सही डेटा वापस आता है। यहां नुकसान यह है कि आपके परीक्षण डीबी को एप्लिकेशन डेटाबेस में किसी भी स्कीमा परिवर्तन के साथ रखना पड़ता है, और सिंक से बाहर निकल सकता है। यह कृत्रिम डेटा पर भी निर्भर करता है, और बेवकूफ उपयोगकर्ता इनपुट के कारण होने वाली बग को उजागर नहीं कर सकता है। अंत में, यदि परीक्षण डेटाबेस छोटा है, तो यह लापता सूचकांक की तरह अक्षमताओं को प्रकट नहीं करेगा। (ठीक है, कि पिछले एक वास्तव में क्या इकाई परीक्षण के लिए इस्तेमाल किया जाना चाहिए नहीं है, लेकिन यह चोट नहीं करता है।)
उत्पादन डेटाबेस की एक प्रति लोड करें और उसके खिलाफ परीक्षण करें। यहाँ समस्या यह है कि आपको पता नहीं चल सकता है कि किसी भी समय उत्पादन डीबी में क्या है; यदि समय के साथ डेटा बदलता है तो आपके परीक्षणों को फिर से लिखना पड़ सकता है।
कुछ लोगों ने बताया है कि ये दोनों रणनीतियाँ विशिष्ट डेटा पर निर्भर करती हैं, और एक इकाई परीक्षण केवल कार्यक्षमता का परीक्षण करना चाहिए। उस अंत तक, मैंने सुझाव दिया है:
- एक मॉक डेटाबेस सर्वर का उपयोग करें, और केवल जाँचें कि ORM किसी दिए गए विधि कॉल के जवाब में सही क्वेरी भेज रहा है।
डेटाबेस-संचालित अनुप्रयोगों के परीक्षण के लिए आपने क्या रणनीतियों का उपयोग किया है, यदि कोई हो? आपके लिए सबसे अच्छा काम क्या है?