2008-10-22 12 views
114

जब मैं परीक्षण निष्पादित होने से पहले एक यूनिट परीक्षण परियोजना का निर्माण करता हूं तो टेस्ट आउटपुट को टेस्ट रेसल्ट फ़ोल्डर में कॉपी किया जाता है और फिर परीक्षण निष्पादित किए जाते हैं। मेरे पास जो मुद्दा है वह यह है कि डीबग/बिन निर्देशिका में सभी फ़ाइलों को TestResults प्रोजेक्ट में कॉपी नहीं किया गया है।यूनिट टेस्ट के साथ काम करने के लिए मुझे "आउटपुट निर्देशिका में कॉपी करें" कैसे मिल सकता है?

मैं एक फ़ाइल कैसे प्राप्त कर सकता हूं जिसे डीबग/बिन निर्देशिका में कॉपी किया गया है ताकि टेस्टResults फ़ोल्डर में भी कॉपी किया जा सके?

उत्तर

119

यह करने के लिए मानक तरीका .testrunconfig फ़ाइल में deployment items, विजुअल स्टूडियो टेस्ट मेनू में या समाधान में संपादित टेस्ट रन विन्यास आइटम के माध्यम से पहुँचा जा सकता है जो निर्दिष्ट करने के द्वारा है आइटम फ़ोल्डर।

+15

वीएस -2010 में यह है: परीक्षण/संपादन टेस्ट सेटिंग्स/स्थानीय, फिर सूची में, "परिनियोजन" का चयन करें, "सक्षम करें ..." बॉक्स को चेक करें और फ़ाइल जोड़ें। – Marcel

+17

आपको अपना समाधान (या यहां तक ​​कि विजुअल स्टूडियो) को बंद करना पड़ सकता है और इस बदलाव को ठीक से प्रभावी होने से पहले फिर से खोलना – RobV

+0

रोबवी, आपने अपना दिन बनाया है। धन्यवाद! –

0

विजुअल स्टूडियो (यदि आप उस आईडीई का उपयोग कर रहे हैं) के भीतर से पोस्ट-बिल्ड इवेंट कमांड लाइन आज़माएं।

+2

मैं हूं, लेकिन यह एक हैक की तरह लगता है। यह एक काफी आम परिदृश्य होना चाहिए और मुझे आशा है कि केवल कुछ विकल्प या संपत्ति है जो मैं ठीक तरह से स्थापित नहीं कर रहा हूं। –

54

आप नीचे दिखाए गए उदाहरण की तरह तैनाती विशेषता निर्दिष्ट कर सकते हैं; इसके अलावा, आप "सामग्री" स्थापित करने के लिए & संपत्ति "यदि नए कॉपी" (बाद में सेटिंग पर कोई प्रलेखन है की जरूरत है, लेकिन आप इसे काम करने के लिए उन निर्धारित किया है।

[TestMethod] 
[DeploymentItem("mytestdata.xml")] 
public void UploadTest() 
{ 



} 
+2

आपको अभी भी इसे सक्षम करने की आवश्यकता है। जैसा कि मर्सेल ने अपनी टिप्पणी में लिखा था, वीएस -2010 में यह है: परीक्षण/संपादन टेस्ट सेटिंग्स/स्थानीय, फिर सूची में, "परिनियोजन" का चयन करें, "सक्षम करें ..." बॉक्स को चेक करें। –

+0

मैं विजुअल स्टूडियो 2012 एक्सप्रेस में इस समस्या से जूझ रहा हूं और क्योंकि यह एक सीमित संस्करण है, स्पष्ट दस्तावेज ढूंढना मुश्किल था। इस जवाब के लिए एक बड़ा धन्यवाद। – DavidHyogo

+2

महान काम करता है। मुझे वास्तव में लगता है कि यह बेहतर तरीका और उत्तर है क्योंकि यह testmethod के ठीक ऊपर आवश्यक फाइलों को दस्तावेज करता है। – bu5hm4nn

5

सभी तीन उत्तर, सही कर रहे हैं पर निर्भर करता है अपनी आवश्यकताओं।

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

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

उम्मीद है कि इससे मदद मिलती है।

+2

मेरा मुद्दा यहां उल्लिखित सापेक्ष पथ था, मैंने सोचा था कि एक्सएमएल निर्देशिका में होना चाहिए, जिसमें परीक्षण था, लेकिन इसे प्रोजेक्ट रूट में होना आवश्यक था, या निर्देशिका में पहले से मौजूद होना चाहिए। –

9

मुझे [DeploymentItem] काम करने के लिए विशेषता के लिए Test -> Edit Test Settings -> Local -> Deployment के तहत "परिनियोजन सक्षम करें" चालू करना पड़ा।

+0

यह सच है। .. मैंने अभी इसे सक्षम किया है और अब विशेषता काम करती है। धन्यवाद! –

+0

जैसा कि मेरी टिप्पणी में किसी अन्य उत्तर में बताया गया है, मैं विजुअल स्टूडियो 2012 एक्सप्रेस में एक ही समस्या के साथ संघर्ष कर रहा हूं और अंत में 2 उत्तरों ने मुझे समाधान दिया। – DavidHyogo

2

मुझे एक ही समस्या थी, लेकिन मुझे स्थानीय.testsettings फ़ाइल के बजाय TraceAndTestImpact.testsettings फ़ाइल को इंगित करने के साथ करना पड़ा। आप टेस्ट/सक्रिय टेस्ट सेटिंग्स मेनू के तहत एक से दूसरे में बदल सकते हैं।

0

विजुअल स्टूडियो 2012 में आपको साधारण मामले के लिए परिनियोजन इटिम विशेषता की आवश्यकता नहीं है। मेरा उत्तर देखें here

1

परीक्षण परियोजनाओं एक testsettings फ़ाइल का उपयोग किए बिना कई समाधान में शामिल के लिए VS2012 में निम्नलिखित काम करता है:

1) फ़ाइलों और फ़ोल्डरों आप परीक्षण परियोजना निर्देशिका में एक फ़ोल्डर में तैनात करने के लिए इच्छा की व्यवस्था।

2) परियोजना गुण में, एक पोस्ट का निर्माण कदम

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>" 

$(ProjectDir) और $(TargetDir) मैक्रोज़ वी.एस. द्वारा व्याख्या की जाएगी और इस तरह के रूप में शामिल किया जाना चाहिए पैदा करते हैं।

<Project_Folder_Name> इतना है कि यह एक से अधिक परीक्षण परियोजनाओं कर रहे हैं अनूठा होगा चरण 1

<Deployment_Folder_Name> में बनाए गए फ़ोल्डर का नाम है फ़ोल्डर जिसमें परीक्षण फ़ाइलों तैनात किया जाएगा और नाम दिया जाना चाहिए का नाम है उसी निर्देशिका में तैनात, उदाहरण के लिए <Project_Name>_TestInputs

साझा स्थानों में परीक्षण फ़ाइलों को परीक्षण इंटरैक्शन को सीमित करने के लिए लक्षित निर्देशिका परिनियोजन फ़ोल्डर में भी कॉपी किया जाना चाहिए। $(ProjectDir) मैक्रो से संबंधित स्रोत पथ प्रदान करें। उदाहरण के लिए "$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"

3) [DeploymentItem(source, destination)] संपत्ति को प्रत्येक टेस्ट विधि में जोड़ें जो तैनाती फ़ाइल (सर्वोत्तम अभ्यास) या टेस्ट क्लास (आलसी या जल्दी के लिए आसान अभ्यास, और पहले इस्तेमाल किए गए प्रोजेक्ट को अपडेट करने का सबसे आसान तरीका है) पथ या एक परीक्षण सेटिंग्स)।

एक परीक्षा पद्धति पर, source फ़ाइल या निर्देशिका xcopy और destination द्वारा बनाई गई के रूप में लक्ष्य निर्देशिका के लिए परीक्षा पद्धति सापेक्ष में इस्तेमाल करने के लिए पथ निर्देशिका जिसमें यह के सापेक्ष बनाया जाएगा करने के लिए पथ है तैनाती निर्देशिका। इसलिए परीक्षण लक्ष्य निर्देशिका या तैनाती निर्देशिका में लगातार चलते हैं। गंतव्य पथ फ़ाइल संदर्भ के बिना स्रोत पथ के समान होना चाहिए। उदाहरण: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]DeploymentItem को उस फ़ाइल या निर्देशिका का उपयोग करने वाली प्रत्येक विधि पर शामिल किया जाना चाहिए।

कक्षा में, source और destinationxcopy द्वारा लक्षित निर्देशिका में बनाए गए फ़ोल्डर का नाम दोनों हैं; जब कक्षा में कोई भी परीक्षण चलाया जाता है तो यह संपूर्ण फ़ोल्डर को तैनाती निर्देशिका में कॉपी करेगा। उदाहरण: [DeploymentItem("Example_TestInputs","Example_TestInputs")]

4) परीक्षण विधियों में, अब आप विश्वास के साथ फाइलों और निर्देशिकाओं तक पहुंच सकते हैं, भले ही वे विजुअल स्टूडियो ने उस दिन इसे रखने का फैसला किया हो, भले ही वे कार्यशील निर्देशिका में हों। File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")

1

बस इसे dll के बजाय फिर डेटा या config आदि के लिए उपयोग करने, जिन परिस्थितियों में CopyLocal काम नहीं करता है के लिए के सामान्य विधि के लिए विशेष रूप तैनात करने के लिए प्राप्त करने के लिए एक तरह से उल्लेख के द्वारा स्वीकार कर लिया जवाब में वृद्धि करना चाहते हैं:

[DeploymentItem("bin\\release\\iRock.dll")] 
[DeploymentItem("bin\\debug\\iRock.dll")] 
0
[TestMethod] 
[DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")] 
public void YourTestMethod() 
{ 
    // in the method you are testing you should have this: 
    var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml"; 
}