2010-01-27 16 views
6

तो एक सहकर्मी और मैं काफी गर्म बहस में हूं। हम एक नई परियोजना शुरू कर रहे हैं और हम बीडीडी का उपयोग करने का प्रयास कर रहे हैं। हम दोनों पहली बार टाइमर हैं और पूरी तरह से समझ में नहीं आता कि किस अभ्यास का उपयोग किया जाना चाहिए। हमने कुछ चश्मा लिखे हैं और अब हम कोड को कार्यान्वित कर रहे हैं। चीजें बहुत मुश्किल हो रही हैं क्योंकि बहुत सारे डेटाबेस इंटरैक्शन हैं। हम इस बात पर अटक गए हैं कि हमें अपने डेटा का नकल कैसे करना चाहिए। जिस विधि के बारे में हम जा रहे थे, हमें हमारे डेटा के बजाय हमारी विधियों का नकल करने की आवश्यकता होगी। अगर मैं कोड में आपको बताएंगे कि यह सबसे आसान है ...बीडीडी/टीडीडी मॉकिंग डेटा को मुश्किल तरीके से

public static void AssignLeadToDistributor(int leadId, int distributorId) 
{ 
    Lead lead = GetById(leadId); 
    lead.DistributorId = distributorId; 
    Save(lead); 
} 

असल में, हम GetById() और सहेजें() ओवरराइड करने के लिए नकली डेटा वापस करने के लिए हमें इस परीक्षण करने के लिए के लिए होगा।

public static void AssignLeadToDistributor(Lead lead, Distributor distributor) 
{ 
    lead.DistributorId = distirbutor.Id; 
} 

तो हम सिर्फ हमारे वस्तुओं नकली सकता है: यह इस तरह यह करने के लिए और अधिक समझ बनाने के लिए लगता है।

स्पष्ट रूप से दूसरी विधि परीक्षण करना आसान बनाता है। हालांकि, तर्क यह है कि हम अपने फ्रंट एंड कोड पर एक नया लीड और वितरक ऑब्जेक्ट नहीं लेना चाहते हैं, क्योंकि हमारे ऑब्जेक्ट्स की आईडी को पास करना आसान होगा। हमारे सामने के अंत में वास्तविक कोड पर काटना।

उम्मीद है कि मैंने काफी अच्छी तरह समझाया है।

आप क्या सोचते हैं? किस तरह से अधिक समझ में आता है?

+0

अच्छी तरह से, निश्चित रूप से, बाइनरी निर्णय आरेख बहुत अच्छे हैं, लेकिन वे अंतिम आखिरी पीढ़ी की चीज नहीं हैं जो हम सब कुछ अप्रचलित जानते हैं ... ओह, रुको, कभी भी ध्यान न दें। –

उत्तर

3

हम अपने बीडीडी चश्मे (निष्पादन योग्य कहानियों) में क्या करते हैं, डीबी को नकल नहीं करना है, बल्कि इसके बजाय इन-मेमोरी डीबी (हमारे मामले में SQLite) का उपयोग करना है।

इसके अलावा, हम किसी परिदृश्य को चलाने से पहले कंटेनर प्रारंभ करते हैं। ऐसा इसलिए है क्योंकि हम चाहते हैं कि हमारे बीडीडी चश्मा यथासंभव असली दुनिया की नकल करें, जबकि अभी भी सामान्य इकाई परीक्षण की गति हो।

इस तरह हमारे बीडीडी चश्मा को परिभाषित करके, हमें यूनिट परीक्षणों और एकीकरण परीक्षणों की कमी की आवश्यकता मिली है, और उत्पादकता और समझदारी में वृद्धि हुई है (हालांकि बहुत ही व्यक्तिपरक है क्योंकि आप वास्तव में उन मीट्रिक को माप नहीं सकते हैं)।

+0

यह एक तरह का मार्ग है जिसे हम जा रहे हैं। यह बहुत अच्छा काम कर रहा है। –

+0

सुपर :-) हम इस विधि को और भी अधिक सराहना करते हैं। –

8

मुझे लगता है कि आपके पास सबसे बड़ी समस्या है क्योंकि आप सार्वजनिक स्थैतिक कार्यों का उपयोग कर रहे हैं (जो आम तौर पर ओओ भाषाओं में एक बुरी चीज है)।

मैं

public AssignDistributor(int distributorId) { 
    this.DistributorId = distributorId; 
    this.Save(); 
} 

आसान परीक्षण करने के लिए और भी बहुत कुछ OO की तरह कोड की तरह लीड वस्तु को यह समारोह, कुछ आगे बढ़ सुझाव देंगे =)

2

मैं दूसरी विधि बेहतर करने के लिए, की तरह कारण आपने कहा: आप परीक्षण के लिए आसानी से मापदंडों का नकल कर सकते हैं। क्या आप एक निर्भरता इंजेक्शन ढांचे का उपयोग कर रहे हैं? यदि नहीं तो मैं आपको अनुशंसा करता हूं कि आप निर्भरता इंजेक्शन सिद्धांत का उपयोग करके अपने मॉड्यूल को और अधिक मॉड्यूलर के लिए और कोड का परीक्षण करने में आसान हों।

और मैं सैमुअल से सहमत हूं कि आपको जब भी संभव हो, स्थिर विधियों का उपयोग करने से बचने की आवश्यकता है, या आपको उन्हें परीक्षण करने में बहुत मुश्किल लगेगी।