2010-03-16 6 views
6

मैं एक ऐसे एप्लिकेशन का परीक्षण करना चाहता हूं जो डेटा फ़ील्ड मान के साथ टेक्स्ट ब्लॉक प्रस्तुत करता हो। प्रतिपादन पूरा होने के बाद, मैं वास्तविक चौड़ाई और वास्तविक ऊंचाई प्राप्त करना चाहता हूं। सब कुछ ठीक काम करता है। जब मैंने एप्लिकेशन का परीक्षण करने की कोशिश की तो समस्या पहली बार आई। मैं टेस्ट प्रोजेक्ट से प्रेषक को आमंत्रित करने में असमर्थ हूं।नुनिट में डब्ल्यूपीएफ डिस्पैचर का आह्वान कैसे करें?

कोड निम्नलिखित है।

this.Loaded += (s, e) => 
{ 
    TextBlock textBlock1 = new TextBlock(); 

    //// Text block value is assigned from data base field. 
    textBlock1.Text = strValueFromDataBaseField;   
    //// Setting the wrap behavior. 
    textBlock1.TextWrapping = TextWrapping.WrapWithOverflow; 
    //// Adding the text block to the layout canvas. 
    this.layoutCanvas.Children.Add(textBlock1); 

    this.Dispatcher.BeginInvoke(DispatcherPriority.Background, 
     (Action)(() => 
      { 
       //// After rendering the text block with the data base field value. Measuring the actual width and height. 
       this.TextBlockActualWidth = textBlock1.ActualWidth; 
       this.TextBlockActualHeight = textBlock1.ActualHeight; 

       //// Other calculations based on the actual widht and actual height. 
      } 
     )); 
}; 

मैंने अभी एनयूनीट का उपयोग करना शुरू कर दिया है। तो, कृपया मेरी मदद करो।

धन्यवाद

उत्तर

1

मैं NUnit का इस्तेमाल किया है नहीं इकाई परीक्षण से पहले लिखने के लिए है, लेकिन इस वी.एस. इकाई परीक्षण के साथ एक आम समस्या है। क्या हो रहा है यह है कि प्रत्येक परीक्षण एक अलग प्रेषक का उपयोग करता है और डब्ल्यूपीएफ के लिए आपको एक ही प्रेषक का उपयोग करने की आवश्यकता होती है। इसके आस-पास पहुंचने के लिए, डिस्पैचर को कैश करने के लिए एक स्थिर वर्ग बनाएं और फिर इसके माध्यम से सब कुछ आमंत्रित करें।

+0

करने की कोशिश कर रहे हैं, ठीक उसी तरह, जो मैं ढूंढ रहा था। धन्यवाद स्टीवन महान :) –

2

आप http://www.codeproject.com/KB/WPF/UnitTestDispatcherTimer.aspx यह WPF और NUnit में एक DispatcherTimer जो बारी में Dispatcher का उपयोग करता है के साथ सौदों को देखने के लिए चाहते हो सकता है।

संपादित

लिंक से कोशिश करते हैं और अपने परीक्षण से पहले ऐसा:

Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, testMethod); 
// Start the worker thread's message pump 
Dispatcher.Run(); // This will block until the dispatcher is shutdown 

और परीक्षण के बाद इसे बंद।

Dispatcher disp = Dispatcher.CurrentDispatcher; 
// Kill the worker thread's Dispatcher so that the 
// message pump is shut down and the thread can die. 
disp.BeginInvokeShutdown(DispatcherPriority.Normal); 
+0

हाय कॉर्नेलियस, लिंक के लिए धन्यवाद। मैं समझ नहीं सका। क्या आप कृपया मुझे कुछ और विवरण दे सकते हैं कि इस परिदृश्य में dispatchertimer कैसे सहायक है। –

+0

मुझे नहीं लगता कि आपको डिस्पैचर टाइमर का उपयोग करना चाहिए, लेकिन लिंक उस डिकर का उपयोग करने में समस्या का वर्णन करता है जो एक WPF प्रोजेक्ट के बाहर डिस्पैचर से संबंधित है जो आप – Cornelius

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