2011-01-12 11 views
7

मैं एएसपी.नेट एमवीसी नियंत्रक विधियों के लिए यूनिट परीक्षण लिख रहा हूं।क्या मुझे अपने यूनिट परीक्षणों में ऑटोमैपर का उपयोग करना चाहिए?

उन नियंत्रकों की IMapper पर निर्भरता है - एक इंटरफ़ेस जिसे मैंने ऑटो ऑटोपरपर बनाया है, कैसल विंडसर का उपयोग करके कन्स्ट्रक्टर इंजेक्शन के माध्यम से पारित किया गया है।

कार्य विधियां IMapper का उपयोग डोमेन ऑब्जेक्ट्स से व्यूमोडेल ऑब्जेक्ट्स में मैप करने के लिए और फिर से वापस करने के लिए करती हैं, जिससे चीजों को DRY रखने और क्रिया विधियों को संक्षिप्त रखने का लक्ष्य रखा जाता है।

मेरी इकाई परीक्षण में, मैं

  1. कॉन्फ़िगर सही बाइंडिंग के साथ AutoMapper (वे AutoMapper प्रोफ़ाइल का उपयोग, इसलिए परीक्षण योग्य और वेबसाइट और इकाई परीक्षण परियोजनाओं के बीच पुन: प्रयोज्य बनाया कर रहे हैं) और उस में पास करना चाहिए एक के रूप में IMapper का उचित ऑटोमैपर कार्यान्वयन।

  2. परीक्षण के आधार पर IMapper उदाहरण के लिए नकली वस्तुओं (मैं Moq का उपयोग कर रहा हूं) में पास करता हूं (इसका मतलब यह होगा कि परीक्षण सेटअप कोड में कुछ काम डुप्लिकेट करना सुनिश्चित करने के लिए कि नकली मैपर से लौटाई गई वस्तुओं से संबंधित है ऑब्जेक्ट्स मॉक मैपर मानचित्र का नाटक कर रहा है)।

  3. केवल मैपिंग के साथ ऑटोमैपर को कॉन्फ़िगर करें मुझे लगता है कि मुझे प्रत्येक टेस्ट के लिए आवश्यकता होगी (बहुत सारे काम और साधन मैं मैपिंग का परीक्षण नहीं कर रहा हूं जो वास्तव में उपयोग में होंगे)।

इकाई परीक्षणों में आधारभूत संरचना कोड का उपयोग करने पर क्या राय है? यह किस बिंदु पर एकीकरण परीक्षण बनता है (यानी ऑटोमैपर और मेरे नियंत्रकों का परीक्षण एकीकरण)?

ऐसा लगता है कि 2 शुद्धवादी दृश्य है, हालांकि मुझे लगता है कि मुझे मोक के बारे में अधिक जानने की आवश्यकता है और इसे उन मूल्यों को वापस करने के लिए कैसे प्राप्त करना है जो उन तरीकों से गुजरने वाले वास्तविक मूल्यों से संबंधित हैं।

उत्तर

6

मैं # 2 से सहमत होना चाहता हूं। आप automapper कामों को जानते हैं, आप अपने इंजेक्शन कार्यों को जानते हैं (उस अधिकार के लिए परीक्षण प्राप्त किए गए हैं? :-)) मैं विशिष्टताओं पर अधिक ध्यान केंद्रित करूंगा, चीजें जो केवल कुछ क्लास नहीं हैं। प्रॉपर्टी = अन्य क्लास.प्रोपर्टी - उन विशेष मामलों का परीक्षण नहीं किया जाना चाहिए बुनियादी प्रति कार्य। ढांचे की सामग्री का परीक्षण न करें।

अधिक परीक्षण कोड के लिए - मुझे लगता है कि यह पूरी तरह से ठीक है। टेस्ट को दिए गए परीक्षणों के लिए दिए गए परीक्षणों (कारण के भीतर भी) के भीतर स्थापित किया जाना चाहिए।

मोक के बारे में, वाक्यविन्यास आसान है, इसे ओवरथिंक न करें। var obj = नया मॉक(); फिर obj.Setup (x => x.Property) जैसी अपनी गुणों को सेट करें। जब तक आपके पास कोई विशिष्ट समस्या न हो, तब तक ("हैलो")। Moq ने भी इसके सभी गुणों को सेटअप किया है, इसलिए आपको ऑटोमैपर

-edit- पाया गया है, यह obj.SetupAllProperties() है;

4

मैं jeriley

Moq को जोड़ना की तरह # 2 के पक्ष में हूँ, तुम इतनी तरह अपने सेटअप में लिख सकते हैं यदि आप इसे करने के लिए पारित कर दिया मूल्यों पर आधारित एक ऑब्जेक्ट प्रदान करने की जरूरत है:

mockObject.Setup(x => x.MapObject(It.IsAny()) 
      .Returns((ProductDto productDto) => 
      { 
       var product = new Product() 
       { 
        Id = productDto.Id, 
        Name = productDto.Name 
       }; 

       return product 
      });

थोड़ा सा गन्दा लेकिन आसान।

+0

यदि आप एक रिपोजिटरी पैटर्न का उपयोग कर रहे हैं, तो क्या मैं आपको इंगित कर सकता हूं ... http://rileytech.net/post/2010/08/17/Mock-Utility-creating-those-basic-services.aspx - - अंतिम दो फाइलों का उपयोग करें या इसे पूर्ण उदाहरण के रूप में उपयोग करें :-) – jeriley

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