2010-04-24 11 views
7

क्या यह टाइपमैक इस्लालेटर का उपयोग किए बिना किया जा सकता है? मुझे ऑनलाइन कुछ सुझाव मिल गए हैं जैसे मेटाडाटा केवल कनेक्शन स्ट्रिंग में गुजरना, हालांकि टाइपमैक के अलावा मैं कुछ भी नहीं आया हूं, वास्तव में एक मॉक ऑब्जेक्ट कॉन्टेक्स्ट के लिए अनुमति देता है जिसे यूनिट परीक्षण के लिए सेवाओं में इंजेक्शन दिया जा सकता है। क्या मैं TypeMock के लिए $$ नीचे डालता हूं, या क्या विकल्प हैं? क्या कोई भी टाइपमॉक से तुलनीय कुछ भी नहीं बना पाया है जो खुला स्रोत है?ईएफ 4 - यूनिट परीक्षण के लिए ऑब्जेक्ट कॉन्टेक्स्ट को मॉक करने के लिए संभव है?

+1

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

उत्तर

4

मैं बिना किसी मजाक के ईएफ 4 यूनिट परीक्षण कर रहा हूं। मैंने जो किया वह http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/ से कोड के आधार पर एक रिपोजिटरी इंटरफ़ेस बना रहा था, इसके बाद मैंने InMemoryRepository<T> क्लास बनाया जो IRepository इंटरफ़ेस का उपयोग करता था। इसके बाद मैंने कक्षा के अंदर List<T> के साथ IObjectSet<T> को प्रतिस्थापित किया और तदनुसार पुनर्प्राप्ति विधियों को बदल दिया।

इस प्रकार यदि आपको इकाई परीक्षण करने की आवश्यकता है, तो DataRepository के बजाय InMemoryRepository में प्रवेश करें।

+1

-1 Linq2Objects Linq2Entities के लिए अलग-अलग व्यवहार करता है। आप परीक्षण के खिलाफ पास हो सकते हैं लेकिन ईएफ द्वारा एसक्यूएल में पार्स किए जाने पर असफल हो जाते हैं। –

+0

पास करने का कोई तरीका नहीं है कि डेटाबेस तक पहुंच के बिना, इसलिए मुझे यकीन नहीं है कि आपका बिंदु क्या है। मॉकिंग का मतलब यह नहीं है कि आपकी Linq2Entities हमेशा मान्य रहेंगी और साथ ही साथ ठीक से काम करेंगी। – KallDrexx

+2

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

1

प्रॉक्सी क्लास में ऑब्जेक्ट कॉन्टेक्स्ट लपेटें। फिर अपने वर्गों में इंजेक्ट करें।

+0

हां मैंने कोशिश की, और यह एक संभावना है - हालांकि प्रॉक्सी का उपयोग करने वाले इन सभी दृष्टिकोणों की अपनी सीमाएं हैं। लिंक एक चीज के लिए अलग-अलग काम करता है (लिंक से ऑब्जेक्ट्स का उपयोग किया जाता है, लिनक्स बनाम इकाइयों के लिए)। –

+2

ट्रू, लेकिन यूनिट टेस्ट के लिए अलग-अलग लिंक कार्यान्वयन में अंतर लेने के लिए आपके यूनिट परीक्षणों की अपेक्षा करना कुछ हद तक ओवरबोर्ड लगता है। एकीकरण परीक्षण क्षेत्र में और क्या आपको नहीं लगता? – SamuelWarren

3

एक इंटरफ़ेस के पीछे अपनी Linq2Entity क्वेरी डालें, इकाई को वास्तविक डेटाबेस के विरुद्ध अलगाव में परीक्षण करें।

अपने क्वेरी इंटरफेस के लिए अपने व्यापार तर्क के लिए परीक्षण लिखें। लिंकक को अपने व्यापार तर्क में खून न होने दें!

रिपोजिटरी पैटर्न का उपयोग न करें!

0

मुझे नहीं लगता कि भंडार पैटर्न सवाल का एकमात्र जवाब है

मैं इस सवाल का जवाब पसंद आया (यह समस्या, सुनिश्चित करें कि बचा जाता है) - मैं एक मौजूदा codebase करने के लिए परीक्षण शुरू करने के लिए अधिक उपयुक्त लगता है Creating Interface for ObjectContext

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

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