2012-03-01 8 views
5

मेरे पास कुछ यूनिट परीक्षण हैं जो मैं एक WPF एप्लिकेशन के लिए लिख रहा हूं, और जितना मैंने इसे टालने का प्रयास किया है, मेरे पास परीक्षण के तहत कुछ कोड है जो एक दृश्य को तुरंत चालू करता है। जैसे ही दृश्य तत्काल हो जाता है, सभी मार्कअप एक्सटेंशन, शैलियों, आदि का मूल्यांकन किया जाता है। इसके समाधान के लिए मैं एक डमी आवेदन बना लिया है और जब परीक्षण विधानसभा आरंभ नहीं हो जाता किसी भी आवश्यक संसाधनों पंजीकृत:यूनिट परीक्षण WPF एप्लिकेशन साइटफोरिगिन पैक के साथ Uri

[TestClass] 
public class AssemblyInitialize 
{ 
    [AssemblyInitialize] 
    public static void SetupTestAssembly(TestContext context) 
    { 
     if (Application.Current == null) 
      new Application(); 

     var resources = new List<string> 
      { 
       "pack://application:,,,/AssemblyName;component/ResourceDictionary.xaml" 
      }; 

     foreach(var resource in resources) 
     { 
      var uri = new Uri(resource); 
      var dictionary = new ResourceDictionary { Source = uri }; 
      Application.Current.Resources.MergedDictionaries.Add(dictionary); 
     } 
    } 
} 

मैंने पहले भी इस दृष्टिकोण का उपयोग किया है, और यह ठीक काम करता है।

मैं इस दृष्टिकोण के साथ एक छोटे से झुकाव में भाग गया है। मेरे पास कुछ संसाधन हैं जो पैक का उपयोग करते हैं: // siteoforigin: पैक उरी में, और जब परीक्षण इस दृश्य को तुरंत चालू करते हैं तो मुझे फ़ाइल को हल करने में सक्षम नहीं होने के बारे में त्रुटि मिलती है।

XAML:

<ResourceDictionary 
    xmlns="..."> 

    <ImageBrush 
     x:Key="ResourceName" 
     ImageSource="pack://siteoforigin:,,,/Resources/image.png" 
     /> 
</ResourceDictionary> 

त्रुटि संदेश:

Could not find a part of the path 'C:\\Solution\\TestResults\\Workspace_2012-03-01 14_54_29\\Resources\\image.png' 

मैं एक तैनाती आइटम के रूप में संसाधन निर्देशिका जोड़ दिया है, और मैं पुष्टि की है कि छवि है TestRun आउटपुट निर्देशिका। ऐसा लगता है कि AppDomain ऊपर एक फ़ोल्डर जहां अपने परीक्षण विधानसभाओं के स्थान, क्योंकि फ़ाइल वास्तव में स्थित है काम कर रहा है:

c: \ संसाधन \ समाधान \ TestResults \ Workspace_2012-03-01 14_54_29 \ आउट \ image.png

किसी भी सुझाव के बारे में कोई सुझाव है कि मैं आउट निर्देशिका को प्राथमिक फ़ोल्डर के रूप में उपयोग करने के लिए WPF एप्लिकेशन कैसे प्राप्त कर सकता हूं?

+0

क्या यह आपके ऐपडोमेन के मूल फ़ोल्डर को मैन्युअल रूप से मजबूर करने के लिए काम करता है? 'AppDomain.CurrentDomain.SetData (" APPBASE "," FolderNameHere ");' ऐसा लगता है कि एक बेहतर तरीका है, लेकिन मेरी याददाश्त मुझे विफल कर रही है। यह अच्छा पर्याप्त हो सकता है (टीएम)। – ianschol

+0

घंटों के लिए इसमें खुदाई कर रहे थे। AppDomain.CurrentDomain.BaseDirectory आउट फ़ोल्डर देता है। – bryanbcook

उत्तर

3

इसका कारण यह है AppDomain.BaseDirectory है कि अपने परीक्षण धावक एक अनुगामी '/' चरित्र नहीं है द्वारा सेटअप, इस कोड है कि siteoforigin रास्तों का समाधान करता है पथ का अंतिम निर्देशिका खोने के लिए कारण बनता है।

सामान्य या परीक्षण में चलते समय आप निम्न कोड के परिणाम को देख कर इसे देख सकते हैं।

Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory); 

यह हाल ही में fixed NUnit (2.6 में शामिल है) में किया गया है, लेकिन अभी भी अन्य परीक्षण धावकों के साथ कोई समस्या हो सकती है।

new Uri(new Uri(baseDirectory), "some/relative/path.jpg").LocalPath 

कि कोशिश करो के साथ और baseDirectory में स्लैश के बिना:

आप रुचि रखते हैं, यह है कि क्या siteoforigin कोड क्या कर रहा है के बराबर है।

+0

हां पिछला स्लैश अपराधी है। मैंने पोस्टिंग के कुछ ही समय बाद यह खोज लिया और मेरे निष्कर्ष जोड़ने के लिए वापस नहीं आया है, लेकिन मैं वैसे भी आपका जवाब स्वीकार करूंगा।मैं वास्तव में 2010 में एमएसटीएस्ट का उपयोग कर रहा हूं, जो पीछे की ओर स्लैश नहीं डालता है। – bryanbcook

+0

धन्यवाद, मैंने एनयूनीट के बारे में धारणा को हटाने के लिए संपादित किया है। –

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