2009-08-17 17 views
9

मैंने विधि श्रृंखला के माध्यम से कुछ छोटे धाराप्रवाह इंटरफेस बनाए हैं। वे आम तौर पर कई रिपोजिटरीज को कॉल करते हैं जो वेब सर्विसेज/डेटाबेस से डेटा प्राप्त करते हैं।मैं यूनिट टेस्ट कोड कैसे कर सकता हूं जो फ्लुएंट इंटरफ़ेस का उपयोग करता है?

मैं धाराप्रवाह इंटरफ़ेस का उपयोग करने वाले यूनिट परीक्षण विधियों के बारे में कैसे जाना चाहिए?

Public IEnumberable<Computer> FindComputers(string serialNumber) 
{ 
     return Computers.FindBySerialNumber("YBCX00900") 
     .AttachConfiguration() 
     .EnsureAllComputersHaveConfiguration(); 
} 

मैं इकाई धाराप्रवाह इंटरफेस के व्यक्तिगत घटकों का परीक्षण कर सकते, लेकिन अगर मैं इकाई परीक्षण करने के लिए मुझे क्या करना चाहिए इसके बाद के संस्करण FindComputers विधि चाहते हैं?

  1. उपयोग धाराप्रवाह अंतरफलक के ठोस कार्यान्वयन, और भंडार वर्गों
  2. नकली धाराप्रवाह इंटरफेस पर ही उम्मीदों लिख सकते हैं और पर कि
  3. टेस्ट केवल धाराप्रवाह इंटरफेस उम्मीदों निर्धारित करते हैं, और नहीं FindComputers() विधि

मैं आसानी से रखरखाव योग्य दृष्टिकोण ढूंढना चाहता हूं।

उत्तर

3

मुझे लगता है कि एफआई इसकी आवश्यकता से अधिक कर रहा है। मुझे लगता है कि आप डेटा मैपर के रूप में कंप्यूटर का उपयोग कर रहे हैं और एक क्वेरी बनाने के लिए इसका इस्तेमाल भी करते हैं। तुम क्या पता चला है से क्वेरी इस से बनाया गया है:

rule 1: find configured computer with serial number = "whatever" and has-config = true. 
rule 2: find not-config computer with serial number = "whatever and has-config = true. 
rule 3: find configured computer with serial number = "whatever" and has-config = false. 
rule 4: find not-config computer with serial number = "whatever" and has-config = false. 
rule 5: find all computer with serial number = "whatever" and has-config = true. 
rule 6: find all computer with serial number = "whatever" and has-config = false. 

और इतने पर ...

अब इन नियमों को लागू किया जा सकता है कि कुछ जानकारी गलत होने लगते हैं। नियम 2 और नियम 3 क्रॉस प्रयोजनों पर प्रतीत होते हैं। नियम 5 और नियम 6 क्या करता है? क्या यह सही है?

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

अब आप FindComputers का परीक्षण कर सकते हैं यह सुनिश्चित कर लें कि FI क्वेरी ऑब्जेक्ट डेटा मैपर पर भेजा गया हो। क्योंकि अब आप एक एफआई क्वेरी ऑब्जेक्ट बना सकते हैं, आप इसका परीक्षण कर सकते हैं। और आप परीक्षण कर सकते हैं कि डेटा मैपर एक क्वेरी ऑब्जेक्ट का उपयोग करता है।

यदि भविष्य में आप स्थान के आधार पर कंप्यूटर खोजना चाहते हैं तो क्या होगा। यदि आप वही कोड रखते हैं जैसा आपने लिखा था तो आपको एक विधि FindByLocation जोड़ना होगा और इससे पहले कि आप इसे जानते हों कि आपके पास ईश्वर वस्तु है। बदबूदार!

+0

धन्यवाद, आप सही हैं कि उदाहरण खराब विचार किया गया है, मैंने बाद में क्वेरी के लिए एफआई को तोड़ दिया है, और एक डेटा लौटाए गए कार्यों पर संचालन करने के लिए है। मुझे इकाई को अलग-अलग में परीक्षण करने के लिए सबसे आसान पाया गया है, और उसके बाद यूनिट परीक्षण विधियां जो ठोस कार्यान्वयन के साथ FI का उपयोग करती हैं। बस परीक्षण करें कि वांछित परिणाम वापस आ गया है। FI उपहास करने के लिए कोशिश कर रहा है सिर्फ परीक्षण भी भंगुर बनाता है। – Andronicus

0

मैं 2 + 3 करूंगा। धाराप्रवाह इंटरफेस मानते हैं कि वास्तव में इंटरफेस हैं, उन्हें नकली करने के लिए अपेक्षाकृत सरल होना चाहिए। बस कॉल श्रृंखला में प्रत्येक चरण को महसूस करना चाहिए कि शायद एक नई नकली वस्तु वापस करनी चाहिए, जो बदले में श्रृंखला में अगली कॉल की उम्मीद कर रही है।

आपको अभी भी नीचे के फ्लोर इंटरफ़ेस का परीक्षण करना चाहिए, हालांकि उनके नीचे रिपोजिटरी परत का मज़ाक उड़ाते हुए।

+0

इनपुट के लिए धन्यवाद, मैं धाराप्रवाह इंटरफ़ेस ही मजाक के बारे में सोचा है, लेकिन यह ठीक वैसे ही जैसा परीक्षण लिखने के लिए ... अपेक्षा अजीब लगता है (x => x.FindBySerialNumber (शून्य))।वापसी (nextMock) अपेक्षा (x => x.AttachConfiguration())। वापसी (nextMock) जब सभी यह परीक्षण है कि कॉल वास्तव में बना रहे हैं। नकली वस्तुओं में पूरे धाराप्रवाह इंटरफ़ेस को फिर से बनाने के लिए यह बहुत काम है, केवल परीक्षण के तहत विधि में स्पष्ट रूप से लिखे गए परीक्षणों का परीक्षण करने के लिए। – Andronicus

+0

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

1

क्या आप अपनी रिपोजिटरी का नकल कर सकते हैं? जबकि कुछ एक और शुद्ध दृष्टिकोण की वकालत करेंगे जहां आपको एक वर्ग की एक विधि को अलग करना होगा, यह जांचने का एक अच्छा तरीका होगा कि FindComputers और धाराप्रवाह इंटरफ़ेस एक साथ कैसे काम करते हैं। और रिपोजिटरी एक्सेस लेयर की तरह दिखने के आधार पर यह आसान हो सकता है।

संबंधित मुद्दे

 संबंधित मुद्दे