2010-04-27 3 views
7

समस्या: जब इकाई परीक्षण (स्थानीय true पर सेट किया जाता कॉपी) कर SQLite विधानसभा मेरी DAL विधानसभा में संदर्भित उत्पादन फ़ोल्डर में प्रतिलिपि प्राप्त करता है।SQLite विधानसभा इकाई परीक्षण के लिए आउटपुट फ़ोल्डर में प्रतिलिपि नहीं

मैं वीएस -2008 में नेट 3.5 एप पर काम कर रहा हूं, एनएचबीर्नेट & मेरे डीएएल में SQLite के साथ। डेटा परतों को अन्य परतों में आईरिपोजिटरी इंटरफेस (रिपोजिटरी फैक्ट्री) के माध्यम से उजागर किया जाता है, इसलिए अन्य परतों में NHibernate या System.Data.SQLite असेंबली को संदर्भित करने की आवश्यकता नहीं है।

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

समस्या

है जब मैं इकाई परीक्षण जो एक अलग परियोजना रहते चलाने - अगर मैं इकाई परीक्षण परियोजना के लिए एक संदर्भ के रूप System.Data.SQLite नहीं जोड़ते हैं, यह TestResults ... \ आउट फ़ोल्डर (में कॉपी किया नहीं प्राप्त करता है हालांकि यह प्रोजेक्ट मेरे डीएएल प्रोजेक्ट का संदर्भ देता है, जो System.Data.SQLite का संदर्भ देता है, जिसमें इसकी प्रतिलिपि स्थानीय संपत्ति true पर सेट है), इसलिए परीक्षण विफल हो जाते हैं जबकि NHibernate को कॉन्फ़िगर किया जा रहा है। अगर मैं अपने परीक्षण प्रोजेक्ट में संदर्भ जोड़ता हूं, तो इसे कॉपी किया जाता है और यूनिट परीक्षण काम करते हैं।

मैं क्या गलत कर रहा हूं?

[अपडेट]

यह मैं इस सवाल का जवाब यहाँ मिल गया है लगता है: TFS UnitTesting not deploying local copy assembly to test dir when on build server। यदि मैं अपने डीएएल में कुछ स्थिर विधि में उस प्रकार का संदर्भ जोड़ता हूं, तो जब मैं अपने परीक्षणों में डीएएल असेंबली का संदर्भ देता हूं तो यह स्वचालित रूप से कॉपी हो जाएगा। यह एक हैक की तरह प्रतीत होता है लेकिन आईएमएचओ एक अलग स्क्रिप्ट होने के बजाय एक क्लीनर समाधान है क्योंकि यह "असली" निर्भरता बनाता है।

ऐसा लगता है कि अगर मैं SQL परीक्षण असेंबली को मेरे परीक्षण रन कॉन्फ़िगरेशन (LocalTestRun.testrunconfig फ़ाइल) में अतिरिक्त परिनियोजन आइटम के रूप में जोड़ता हूं तो यह भी कॉपी हो जाता है।

आपके त्वरित उत्तरों के लिए धन्यवाद!

उत्तर

6

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

+0

या आप इसे पूर्व-परीक्षण चरण के रूप में आवश्यक असेंबली पर प्रतिलिपि बनाने के लिए अपनी नेंट-या-समकक्ष बिल्ड स्क्रिप्ट में जोड़ सकते हैं। – Gishu

+0

धन्यवाद, लेकिन मैं वास्तव में अपने व्यापार परत परीक्षणों में एक विशिष्ट डेटा असेंबली का संदर्भ देने से बचना चाहता हूं, यह सही नहीं लगता है। – Groo

+1

मैं यूनिट परीक्षण संदर्भों के असेंबली के बारे में बहुत ज्यादा चिंता नहीं करता। –

1

आप अपने आउटपुट फ़ोल्डर में मैन्युअल रूप से डीएलएल की प्रतिलिपि बनाने के लिए पोस्ट-बिल्ड चरण का उपयोग कर सकते हैं।

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