2013-06-26 19 views
5

के दौरान संदर्भित परियोजना का मार्ग प्राप्त करें I यूनिट परीक्षणों का उपयोग करके, मेरे (एएसपी.Net) वेबप्लिकेशंस में कक्षा की कार्यक्षमता का परीक्षण करने का प्रयास करें। इस वर्ग (XSL रूपांतरण प्रदर्शन करने के लिए) हार्ड ड्राइव से कुछ फाइलें लोड करता है:यूनिट परीक्षण

Xsl = GetXSLFromFile(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt") 

इस पथ सही ढंग से WebApplication ही की डीबगिंग के दौरान हल हो गई है। लेकिन जब भी मैं यूनिट टेस्ट शुरू करता हूं (जो एक अलग परीक्षण परियोजना में रहता है, वेबप्लिकेशन की परियोजना का संदर्भ देता है), मुझे इसके बजाय परीक्षण प्रोजेक्ट का मार्ग मिलता है।

क्या इस परिदृश्य में वेबप्लिकेशंस का मार्ग प्राप्त करना संभव है, या क्या मुझे एक अलग दृष्टिकोण का उपयोग करना है? किसी भी संकेत की सराहना की जाती है।

सधन्यवाद, काई हार्टमैन

उत्तर

0

ठीक है, यह संकेत दिया था: Can a unit test project load the target application's app.config file?

.testsettings फ़ाइल में, मेरा WebApplication परियोजना के लिए परीक्षण परियोजना से जोड़ा, मैं फ़ाइलों और फ़ोल्डरों को जोड़ सकता हूं जिन्हें टेस्ट निष्पादित होने पर प्रत्येक बार परीक्षण प्रोजेक्ट डीबग फ़ोल्डर में कॉपी किया जाना चाहिए।

तो इसके बाद मैं प्रति एपडोमेन.कुरेंटडोमेन.बेस डायरेक्टरी के एक्सएसएल-फाइलों का संदर्भ दे सकता हूं।

साथ ही, यह भी रखने के लिए फ़ोल्डर संरचना, मैं यहाँ क्या वर्णित किया गया है करना था: Visual Studio Test Project - Does not copy folder on deployment

मैं .testsettings एक पाठ संपादक के साथ फ़ाइल संपादित करें, और outputDirectory पैरामीटर जोड़ने का था। इसके बाद मैंने विजुअल स्टूडियो को पुनरारंभ किया, और परीक्षण प्रोजेक्ट शुरू करने पर फ़ोल्डर और फ़ाइलों को सही तरीके से कॉपी किया गया है।

3
string path; 
path = System.IO.Path.GetDirectoryName( 
    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 

HOW TO: Determine the Executing Application's Path

Getting the path of a executable file in C#

आशा यह सहायक है .. :)

+4

निष्पादन असेंबली सबसे अजीब परियोजना होगी। आपको गलत रास्ता मिल जाएगा। –

+1

हाय। यह सामान्य रूप से सहायक है, क्योंकि यह वास्तविक निष्पादन असेंबली का मार्ग देता है। :) लेकिन मेरे मामले में यह परीक्षण परियोजना का सबफ़ोल्डर भी देता है। मुझे जिस चीज की आवश्यकता है वह कक्षा है या कुछ ऐसा है। –

4

मैं सुझाव है कि आप कुछ इस तरह करते हैं:

public class MyXslFileLoader 
{ 
    public void Load() 
    { 
     Load(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt"); 
    } 

    public void Load(string path) 
    { 
     Xsl = GetXSLFromFile(path); 
    } 
} 

आप अपने वेब एप्लिकेशन में Load() पर कॉल करेंगे, लेकिन इस विधि के ओवरलोडेड संस्करण को अपने unittest एप्लिकेशन में उपयोग करें। आप xslt फ़ाइल को अपनी प्रोजेक्ट के संसाधन के रूप में जोड़ने पर विचार कर सकते हैं।

आप इस तरह पथ लोड करने में सक्षम होगा:

var webApplicationDllPath = Path.GetDirectoryName(typeof(ClassInTheWebApplicationDll).Assembly.GetName().CodeBase); 
+0

हां, यह व्यवहार्य हो सकता है। एकमात्र कमी यह है कि मुझे प्रत्येक मूल विधि में पथ पैरामीटर का उपयोग करना होगा। शायद मुझे अपने वर्ग के तत्काल पर पुनर्विचार करना होगा, और कन्स्ट्रक्टर के माध्यम से मार्ग प्रदान करना होगा। –

+0

यह एक कमी है? आप उस वर्ग को आधार बना सकते हैं जिसमें विधि अधिभार शामिल है और उन्हें वहां लागू करें। इसके अलावा, 'Path.GetDirectoryName' उदाहरण पर्याप्त होगा, सैद्धांतिक रूप से –

+0

पथ। GetDirectoryName उदाहरण परीक्षण प्रोजेक्ट का पथ भी देता है।दोष के साथ मेरा क्या मतलब है, वेबपैप्लिकेशन में फ़ाइल लोड करने की विधि को परीक्षण प्रोजेक्ट में कॉल से कॉलस्टैक में प्रत्येक विधि को उस पैरामीटर को प्राप्त करना होगा। क्लास की तरह कुछ .LoadXsl (पथ) -> class.LoadXsl2 (पथ) -> कक्षा। लोड (पथ)। –

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