मैं वास्तव में एक बड़ी Django परियोजना के लिए प्रभावी इकाई परीक्षण लिखने के लिए संघर्ष कर रहा हूं। मेरे पास यथोचित परीक्षण कवरेज है, लेकिन मुझे पता चला है कि जो परीक्षण मैं लिख रहा हूं, वे निश्चित रूप से एकीकरण / स्वीकृति परीक्षण हैं, इकाई परीक्षण बिल्कुल नहीं हैं, और मेरे पास मेरे आवेदन के महत्वपूर्ण हिस्से हैं जो प्रभावी रूप से परीक्षण नहीं कर रहे हैं। मैं इस ASAP को ठीक करना चाहता हूं।
यहाँ मेरी समस्या है। मेरा स्कीमा गहरा संबंध है, और भारी समय उन्मुख है, जो मेरे मॉडल ऑब्जेक्ट को उच्च आंतरिक युग्मन और बहुत सारे राज्य देता है। समय अंतराल के आधार पर मेरे कई मॉडल तरीके क्वेरी करते हैं, और मुझे auto_now_add
टाइमस्टैम्पड क्षेत्रों में जाने का बहुत मौका मिला है । तो उदाहरण के लिए ऐसा तरीका अपनाएं:
def summary(self, startTime=None, endTime=None):
# ... logic to assign a proper start and end time
# if none was provided, probably using datetime.now()
objects = self.related_model_set.manager_method.filter(...)
return sum(object.key_method(startTime, endTime) for object in objects)
एक दृष्टिकोण कुछ इस तरह का परीक्षण कैसे करता है?
यहां मैं अब तक कहां हूं। यह मेरे लिए होता है कि इकाई परीक्षण उद्देश्य को उसके तर्कों पर कुछ मज़ाकिया व्यवहार दिया जाना चाहिए , क्या सही परिणाम उत्पन्न करने के लिए फ़िल्टरिंग / एग्रीगेटिंग सही है?by key_method
summary
Mocking datetime.now () सीधा सीधा पर्याप्त है, लेकिन मैं बाकी व्यवहार का कैसे मजाक उड़ा सकता हूं?
- मैं जुड़नार का उपयोग कर सकता हूं, लेकिन मैंने अपने डेटा के निर्माण के लिए जुड़नार का उपयोग करने के पेशेवरों और विपक्षों को सुना है (खराब रखरखाव एक शंकु है जो मेरे लिए घर हिट करता है)।
- मैं अपने डेटा को ORM के माध्यम से भी सेट कर सकता था, लेकिन यह सीमित हो सकता है, क्योंकि तब मुझे संबंधित ऑब्जेक्ट भी बनाने होंगे। और ORM आपको
auto_now_add
मैन्युअल रूप से फ़ील्ड के साथ गड़बड़ नहीं करने देता है । - ओआरएम को मॉक करना एक और विकल्प है, लेकिन न केवल ओआरएम विधियों का गहरा मजाक उड़ाना मुश्किल है, बल्कि ओआरएम कोड में तर्क का परीक्षण से बाहर हो जाना, और नकली का परीक्षण वास्तव में आंतरिक और निर्भरता पर निर्भर करता है। समारोह-अंडर-परीक्षण।
दरार करने के लिए सबसे मुश्किल नट इस तरह के कार्य प्रतीत होते हैं, जो मॉडल और निचले स्तर के कार्यों की कुछ परतों पर बैठते हैं और समय पर बहुत निर्भर होते हैं, भले ही ये कार्य सुपर जटिल न हों। मेरी समग्र समस्या यह है कि कोई फर्क नहीं पड़ता कि मैं इसे कैसे स्लाइस कर रहा हूं, मेरे परीक्षण उन कार्यों की तुलना में अधिक जटिल दिख रहे हैं जो वे परीक्षण कर रहे हैं।