2010-02-08 7 views
35

मुझे एनयूएनआईटी यूनिट परीक्षण में कुछ WPF घटकों का उपयोग करने की आवश्यकता है। मैं ReSharper के माध्यम से परीक्षण चलाने, और जब WPF वस्तु का उपयोग कर इसे निम्नलिखित त्रुटि के साथ विफल:एनयूनीट परीक्षणों में डब्ल्यूपीएफ घटकों का उपयोग करना - एसटीए का उपयोग कैसे करें?

System.InvalidOperationException:

बुला धागा होना चाहिए एसटीए, क्योंकि कई UI घटक इस आवश्यकता होती है।

मैं इस समस्या के बारे में पढ़ा है, और यह लग रहा है धागे की तरह STA होने की जरूरत है, लेकिन मैं समझ नहीं है कि कैसे अभी तक यह करने के लिए। समस्या को ट्रिगर करता है निम्न कोड:

[Test] 
public void MyTest() 
{ 
    var textBox = new TextBox(); 
    textBox.Text = "Some text"; // <-- This causes the exception. 
} 
+1

यह एक इकाई परीक्षण नहीं है। साथ ही, क्या आप वाकई अपने परीक्षणों को WPF घटकों पर भरोसा करना चाहते हैं? यूआई को ऊपर के कारणों के लिए आवेदन तर्क से अलग किया जाना चाहिए। – Finglas

+7

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

+0

यदि आप देखना चाहते हैं कि मेरे पास एप्लिकेशन तर्क में यूआई क्यों है तो मेरा अन्य प्रश्न देखें: http://stackoverflow.com/questions/2220842/modifying-ui-from- आदेश-उपयोग-कमांड-बाइंडिंग-इन-डब्ल्यूपीएफ – stiank81

उत्तर

0

क्या आपने this को आजमाया है?


... बस dll आप परीक्षण करने के लिए प्रयास कर रहे हैं के लिए एक app.config फ़ाइल बनाते हैं, और एसटीए के बजाय एमटीए के रूप में परीक्षण environemnt बनाने के लिए NUnit मजबूर करने के लिए कुछ NUnit उचित सेटिंग्स जोड़ें।

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <sectionGroup name="NUnit"> 
      <section name="TestRunner" type="System.Configuration.NameValueSectionHandler"/> 
     </sectionGroup> 
    </configSections> 

    <NUnit> 
     <TestRunner> 
      <add key="ApartmentState" value="STA" /> 
     </TestRunner> 
    </NUnit> 
</configuration> 
+2

Thx! बस मुझे एक ही समाधान मिला, और यह काम करता है। स्पष्ट रूप से ReSharper nUnit के पुराने संस्करण का उपयोग करता है, और इसलिए मैं बस [RequiresSTA] विशेषता का उपयोग नहीं कर सकता। – stiank81

+2

एफवाईआई, '[RequiresSTA] 'वीएस 2013 में रीसर्पर 9 – cod3monk3y

+0

के साथ ठीक काम करता है यदि ReSharper के किसी विशेष संस्करण को RequiresSTA के साथ कोई समस्या है, तो क्यों ReSharper को चेतावनी को अनदेखा नहीं किया गया है? – bugged87

58

आप अपने परीक्षण वर्ग के लिए RequiresSTA attribut जोड़ना चाहिए:

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

[TestFixture, RequiresSTA] 
public class MyTestClass 
{ 
} 
+7

यह उत्तर होना चाहिए ... –

+1

यह केवल 3.0 के नीचे NUnit के संस्करणों के लिए है। यह अप्रचलित है> संस्करण 3. –

18

अधिक हाल के संस्करणों के साथ, विशेषता बदल गया है:

[Apartment(ApartmentState.STA)] 
public class MyTestClass 
{} 
+5

यह न्यूटिट के संस्करण 3 के साथ वर्तमान उत्तर है। –

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