2011-10-17 17 views
9

मैं एक आवेदन पर काम कर रहा हूं और मैंने इसके लिए कई यूनिट परीक्षण बनाए हैं। टेस्ट क्लास के साथ परियोजना 3 थर्ड पार्टी डीएलएल पर निर्भर करती है। जब मैं परीक्षण परियोजना के लिए बिन \ डीबग फ़ोल्डर में जाता हूं, तो डीएलएस वहां होते हैं। लेकिन जब मैं परीक्षण चलाता हूं, डीएलएल को testResult \\ आउट फ़ोल्डर में कॉपी नहीं किया जा रहा है।जब मैं परीक्षण चलाता हूं तो मैं अपने डीएलएल और अन्य फ़ाइलों की प्रतिलिपि बनाने के लिए यूनिट टेस्ट कैसे प्राप्त करूं?

एक अन्य प्रोजेक्ट से log4net.config फ़ाइल भी है जिसे मैं कॉपी करना चाहता हूं। यह परीक्षण प्रोजेक्ट के बिन \ डीबग फ़ोल्डर में दिखाई नहीं दे रहा है, इसलिए यह एक और मुद्दा है जिसे मुझे ठीक करना है।

जब मैं इकाई परीक्षण चलाता हूं तो इन फ़ाइलों को प्रतिलिपि बनाने के लिए कैसे प्राप्त करूं?

टोनी

+1

आप यूनिट परीक्षण के साथ क्या कर रहे हैं? NUnit? MSTest? – vcsjones

+0

एमएसटीएस्ट, मुझे लगता है। वह टूल जो विजुअल स्टूडियो 2010 में है। –

उत्तर

5

हम है कि बनाता का हिस्सा बनने के 3 पार्टी DLL के युक्त एक बिन फ़ोल्डर है। वे संदर्भ में 'स्थानीय प्रतिलिपि' विशेषता के साथ ध्वजांकित हैं।

व्यक्तिगत फ़ाइलों के लिए, आप वही कर सकते हैं - 'आउटपुट निर्देशिका में कॉपी करें' को सही पर सेट करें।

+0

धन्यवाद! यह डीएलएल तय किया। मुझे समझ में नहीं आता कि log4net.config फ़ाइल के साथ समस्या को कैसे ठीक किया जाए। वह एक और प्रोजेक्ट में है और इसमें "आउटपुट निर्देशिका में कॉपी करें" संपत्ति "सेट अगर नई है" (मैं वीएस 2010 का उपयोग कर रहा हूं) पर सेट है। लेकिन यह टेस्ट प्रोजेक्ट के बिन \ डीबग फ़ोल्डर में कॉपी नहीं हो रहा है, और परीक्षण उस परियोजना पर निर्भर करता है। –

0

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

+0

डीएलएल का संदर्भ दिया जाता है लेकिन उन्हें कॉपी नहीं किया जा रहा था। ऐसा इसलिए था क्योंकि उन डीएलएल के लिए कॉपी स्थानीय संपत्ति झूठी थी। वे अन्यथा परीक्षण प्रक्रिया का हिस्सा नहीं हैं, सिवाय इसके कि वे कोड द्वारा उपयोग किए जाते हैं। –

9

आप bin (या अन्य) निर्देशिका में फ़ाइलों की प्रतिलिपि बनाने के लिए एक परिनियोजन ItemAttribute का उपयोग कर सकते हैं।

[TestMethod()] 
[DeploymentItem("log4net.config")] 
public void SomeTest() 
{ 
    ... 
} 
+0

जब मैं सुबह में काम पर वापस आ जाता हूं तो मैं कोशिश करता हूं। यह आशाजनक लग रहा है! –

+0

आपने अभी अपना जीवन बचाया है! बहुत बहुत धन्यवाद। – RoadBump

0

जब आप स्टूडियो से डिबग, वर्ग या testmethod पर तैनाती विशेषता का उपयोग जहां MSTests चलाए जा रहे हैं से बाहर फ़ोल्डर में आवश्यक DLLs और config फ़ाइलों की प्रतिलिपि बनाना। यदि आप कमांड लाइन से भागते हैं, तो टेस्ट सेटिंग्स सेटिंग्स का उपयोग करें और परिनियोजन विकल्प अक्षम करें और अपनी बीआईएन फ़ोल्डर को कार्यशील निर्देशिका के रूप में सेट करें। Mstest चलाने के लिए अपनी कमांड लाइन में इस टेस्टसेट सेटिंग्स को प्रयोग/संदर्भित करें। इस तरह, आप डीएलएल को आउट निर्देशिका में डंप किए बिना अपने बीआईएन फ़ोल्डर में सबसे तेज़ दाएं चला सकते हैं। फिर, स्टूडियो से डीबग करने के लिए परिनियोजन विशेषता का उपयोग करें, वहां परीक्षण कार्य नहीं करेंगे।

1

मुझे पता चला है कि परीक्षण परीक्षण क्षेत्र (डिफ़ॉल्ट रूप से सही) में आपके परीक्षण तैनात किए जा रहे हैं, स्थानीय प्रतिलिपि कुछ परिस्थितियों में काम नहीं करेगा जैसे गतिशील असेंबली लोडिंग।

आप एक runsettings फ़ाइल (https://msdn.microsoft.com/en-us/library/ms182475.aspx) और

<DeploymentEnabled>False</DeploymentEnabled> 

या, एक छोटे से हैक का उपयोग करके इस तैनाती बंद कर देते हैं या तो कर सकते हैं (थोड़ा बदसूरत यह मैनुअल/कठिन विधानसभा कोडिंग की आवश्यकता के रूप में), एक DeploymentItem का उपयोग करके द्विआधारी के लिए (अन्य उत्तर में बताया गया है, लेकिन, ओपी के अनुसार DLLs से निपटने के लिए विशिष्ट नहीं):

[DeploymentItem("bin\\release\\iRock.dll")] 
[DeploymentItem("bin\\debug\\iRock.dll")] 

सिफारिश दोनों डिबग/रिलीज कर रही है, जो आपके सीआई/देव पर प्रयोग किया जाता है पर निर्भर करता है।