2015-04-02 6 views
8

पास करने में असमर्थ मैं NUnit टेस्ट का उपयोग करके विभिन्न परीक्षण पैरामीटर पास करना चाहता हूं।स्ट्रिंग सरणी

मैं पूर्णांक सरणी पास कर सकता हूं, कोई समस्या नहीं, लेकिन जब मैं स्ट्रिंग सरणी पास करता हूं तो यह काम नहीं करता है।

[TestCase(new[] { "ACCOUNT", "SOCIAL" })] 
public void Get_Test_Result(string[] contactTypes) 
{ 
} 

त्रुटि 3 एक विशेषता तर्क एक निरंतर अभिव्यक्ति, एक विशेषता पैरामीटर के typeof अभिव्यक्ति या सरणी निर्माण अभिव्यक्ति होना चाहिए प्रकार ... \ ContactControllerTests.cs 78 13 UnitTests

यह जब मैं स्ट्रिंग सरणी का उपयोग दूसरे तर्क के रूप में करता हूं तो काम करता है।

तो कारण क्या है?

[TestCase(0, new[] {"ACCOUNT", "SOCIAL"})] 
public void Get_Test_Result(int dummyNumber, string[] contactTypes) 
{ 
} 
+0

क्या आपने स्पष्ट रूप से सरणी प्रकार निर्दिष्ट करने का प्रयास किया था? 'नई स्ट्रिंग [] {...}'? – abatishchev

+0

@abatishchev हाँ, लेकिन यह काम नहीं करता है। – codebased

+1

मैं देखता हूं। ओह। आप न्यूटिट का किस संस्करण का उपयोग करते हैं? – abatishchev

उत्तर

0

रूप

[TestCase("ACCOUNT", "SOCIAL")] 
public void Test1() 
{ 

} 

सुनिश्चित नहीं हैं कि अगर अपने परीक्षण मेरा करने के समान होगा इस प्रकार कर रही पर विचार करें। लेकिन मैं

enter image description here

इसके अतिरिक्त निम्नलिखित परीक्षण

[TestFixture] 
public class TestCaseTest 
{ 
    [TestCase("ACCOUNT","SOCIAL")] 
    public void Get_Test_Result(String a, String b) 
    { 
    Console.WriteLine("{0},{1}",a,b); 
    } 
} 

और परिणाम के साथ की उम्मीद परिणाम मिला, मेरा मानना ​​है कि इस का एक मामला है अगर आप TestCaseAttribute

+0

आम तौर पर, अगर वे स्पष्टीकरण शामिल करते हैं तो उत्तर अधिक उपयोगी होते हैं। –

+1

स्वयं-स्पष्टीकरण कोड जैसी कोई चीज़ नहीं, खासकर जब आप इस तरह वाक्यविन्यास quirks से निपट रहे हैं। * विशेष रूप से * जब आप पूरी तरह से उद्घाटन मान्यताओं में से एक से निकलते हैं और यह नहीं समझाते कि समस्या पहली जगह क्यों आई थी। –

+0

@ सैफुर गलत तर्कों की संख्या – codebased

2

के लिए कुछ संदर्भ चाहते हैं अधिभार संकल्प & सरणी सह-भिन्नता मुद्दा।

[TestCase(new string[] { "" })] कंपाइलर TestCase के लिए सबसे अच्छा अधिभार तय करता है कन्स्ट्रक्टर params object[] तर्क के रूप में लेने वाला है। ऐसा इसलिए है क्योंकि संकलक string[] से object[] को एरे सह-भिन्नता के लिए धन्यवाद दे सकता है और नतीजतन यह string[] से object असाइनमेंट (अन्य कन्स्ट्रक्टर) से अधिक विशिष्ट मिलान है।

यह int[] के साथ नहीं होता है क्योंकि co-variance does not apply to arrays of value types इसलिए कंपाइलर को object कन्स्ट्रक्टर का उपयोग करने के लिए मजबूर किया जाता है।

अब, यह तय क्यों करता है कि new [] { "ACCOUNT", "SOCIAL" }array creation expression of an attribute parameter type मेरे बाहर नहीं है।

+0

तो संभव समाधान हो सकता है '[टेस्टकेस ((ऑब्जेक्ट) नई स्ट्रिंग [] {""})]' वांछित अधिभार को मजबूर करने के लिए ... –

+0

@AlexeiLevenkov: यही वह है जो मैं करूँगा। लेकिन मैं अभी भी यह नहीं समझ सकता कि क्यों कंपेलर स्ट्रिंग [] के साथ स्ट्रक्चर कंसोलर तर्क के रूप में समस्याएं हैं, भले ही स्पेक कहता है कि यह वैध है। –

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