यूनिट टेस्ट के साथ काम करने के लिए मुझे "आउटपुट निर्देशिका में कॉपी" कैसे मिल सकता है?


123

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

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

जवाबों:


121

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


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

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

रॉब, तुमने मेरा दिन बना दिया। धन्यवाद!
इग्नासियो सोलर गार्सिया 17

2
यदि आप कोड में [परिनियोजन इट] विशेषता का उपयोग करते हैं, तो आपको संवाद में फ़ाइलों को निर्दिष्ट करने की आवश्यकता नहीं है - नीचे @ tomfanning का कोड देखें।
पैट्रिक सज्जापस्की

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

61

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

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



}

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

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

2
बहुत अच्छा काम करता है। मुझे वास्तव में लगता है कि यह एक बेहतर तरीका और उत्तर है क्योंकि यह टेस्टमेथोड के ठीक ऊपर आवश्यक फाइलों का दस्तावेज है।
bu5hm4nn

1
मैंने पाया कि टेस्ट क्लास स्तर (विधि के स्तर के बजाय) में निर्दिष्ट किए जाने पर परिनियोजनआइटम विशेषता भी काम करती है ।
जॉन श्नाइडर

10

मुझे काम करने Test -> Edit Test Settings -> Local -> Deploymentकी [DeploymentItem]विशेषता के तहत "सक्षम तैनाती" चालू करना था ।


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

जैसा कि एक और जवाब के लिए मेरी टिप्पणी में उल्लेख किया गया है, मैं दृश्य स्टूडियो 2012 एक्सप्रेस में एक ही समस्या से जूझ रहा हूं और 2 जवाबों ने आखिरकार मुझे समाधान दिया।
डेविडहोगो

5

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

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

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

उम्मीद है की यह मदद करेगा।


2
मेरा मुद्दा यहाँ वर्णित सापेक्ष पथ था, मुझे लगा कि Xml उस निर्देशिका में होना चाहिए जिसका परीक्षण अंदर था, लेकिन उसे प्रोजेक्ट रूट में होना चाहिए, या उस निर्देशिका द्वारा पूर्वनिर्धारित होना चाहिए जो इसमें थी।
वेस ग्रांट

2

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


2

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

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

1

वीएस २०१२ में परीक्षण परियोजनाओं के लिए कई परीक्षण समाधानों का उपयोग किए बिना कई समाधानों में शामिल निम्नलिखित काम करता है:

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और destinationदोनों के द्वारा लक्ष्य निर्देशिका में बनाए गए फ़ोल्डर का नाम है xcopy; जब क्लास में कोई भी परीक्षा होती है, तो यह संपूर्ण फ़ोल्डर को परिनियोजन निर्देशिका में कॉपी कर देगा। उदाहरण:[DeploymentItem("Example_TestInputs","Example_TestInputs")]

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


0

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


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

0

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


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";
}

0

स्वीकृत उत्तर सही है और इसलिए अधिकांश अन्य उत्तर हैं। हालाँकि, पिछले कुछ वर्षों में मैंने पाया है कि तैनाती के लिए Visual Studio Unit टेस्ट की Deploment प्रणाली का उपयोग करके आउटपुट में कॉपी करें और कॉपी करें यदि आपके पास बड़ी संख्या में डेटा फाइलें हैं, तो बोझिल हो सकती है। मैंने पाया है कि फाइलों को उनके मूल स्थान पर रखने से बेहतर काम हुआ।

मेरे अन्य उत्तर में पूर्ण विवरण यहाँ। https://stackoverflow.com/a/53004985/2989655

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.