2009-12-29 8 views
7

मैंने इस आलेख की पंक्तियों के साथ नकली ऑब्जेक्ट संदर्भ और IObjectSet को EF4 में POCO के साथ यूनिट परीक्षण लागू किया है।इकाई फ्रेमवर्क 4.0 यूनिट परीक्षण

http://blogs.msdn.com/adonet/archive/2009/12/17/test-driven-development-walkthrough-with-the-entity-framework-4-0.aspx

लेकिन मैं अनिश्चित परीक्षण के लिए मेरी नकली वस्तु संदर्भ पर तरीकों में से एक जोड़े को लागू करने के लिए कैसे कर रहा हूँ। मेरे ऑब्जेक्ट संदर्भ इंटरफ़ेस पर CreateQuery और ExecuteFunction विधियां हैं ताकि मैं ESQL और संग्रहीत प्रक्रियाओं को निष्पादित कर सकूं लेकिन मैं अपने नकली ऑब्जेक्ट संदर्भ में उन्हें आसानी से लागू नहीं कर सकता।

एक विकल्प के रूप में यहाँ का सुझाव दिया मेरी वस्तु संदर्भ से एक डबल करने के बजाय मेरी भंडार का एक परीक्षण डबल उपयोग करने के लिए होगा:

http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/c4921443-e8a3-4414-92dd-eba1480a07ad/

लेकिन यह मेरा असली भंडार नहीं है मतलब होगा परीक्षण किया जा रहा है और प्रतीत होता है बस इस मुद्दे को बाईपास करने के लिए।

क्या कोई भी सिफारिशें पेश कर सकता है?

उत्तर

11

जहाँ तक मैं सवाल से कह सकता हूं, आप एक ही समय में बहुत अधिक परीक्षण करने की कोशिश कर रहे हैं। दिमाग में Single Responsibility Principle रखें।

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

कल्पना कीजिए कि आप अप्रत्याशित रूप से अपने भंडार उपभोक्ताओं एक पूरी तरह से अलग डेटा परत (उदाहरण के लिए बाकी आधारित सेवा) के लिए तार करने के लिए कहा जा रहा है। ऐसे मामलों में, यहां तक ​​कि एक सार वस्तु संदर्भ भी कोई समझ नहीं आता है। आप कभी ऐसा होने की उम्मीद नहीं कर सकते हैं, लेकिन फिर भी, अकेले विचार प्रयोग एक लीकी एब्स्ट्रक्शन का एक बहुत अच्छा संकेतक है।

ऑब्जेक्ट संदर्भ आपके कंक्रीट रिपोजिटरी कार्यान्वयन का कार्यान्वयन विवरण है जो ईएफ का उपयोग करता है। अन्य कार्यान्वयनों को ऑब्जेक्ट संदर्भ की आवश्यकता नहीं हो सकती है।

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

+0

महान उत्तर आईएमओ –

+0

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

+0

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

0

क्या SQLite जैसे मेमोरी डेटाबेस में वास्तविक रेपॉजिटरीज़ का परीक्षण करना संभव है? इकाई फ्रेमवर्क के लिए एक SQLite प्रदाता मौजूद है।

ऐसा लगता है कि edmx फ़ाइल में एसएसडीएल अनुभाग एक प्रदाता के साथ मिलकर है। यदि आप एक SQL सर्वर सर्वर से मॉडल उत्पन्न करते हैं तो प्रदाता = "System.Data.SqlClient" सेट हो जाएगा। यह भी सेट किया जाएगा यदि आप किसी इकाई मॉडल से SQL सर्वर सर्वर उत्पन्न करते हैं।

मैं सच में चाहते हैं क्या करने के लिए अपने उत्पादन कोड उपयोग System.Data.SqlClient प्रदाता और System.Data.SqLite प्रदाता का उपयोग करने के लिए अपने इकाई परीक्षण बनाने के लिए है करने के लिए।

+0

ईएफ के साथ डीबी को स्विच करना बहुत मुश्किल नहीं है, जब तक आपके डीबी के लिए एक प्रदाता है जो ईएफ का समर्थन करता है। इसे पूरा करने के तरीके के बारे में यहां एक अच्छी पोस्ट दी गई है: http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx – Odrade

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