2012-03-03 14 views
8

मैं है निम्न परीक्षण:पासिंग एकल मान NUnit testcase में तर्क पैरामीटर को

[ExpectedException(typeof(ParametersParseException))] 
[TestCase("param1")] 
[TestCase("param1", "param2")] 
[TestCase("param1", "param2", "param3", "optParam4", "optParam5", "some extra parameter")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 

पहले testcase (जाहिर है) निम्न त्रुटि के साथ विफल:

System.ArgumentException : Object of type 'System.String' 
cannot be converted to type 'System.String[]'. 

मैं testcase को बदलने के लिए करने की कोशिश की इस के साथ परिभाषा:

[TestCase(new[] { param1 })] 

लेकिन अब मुझे निम्नलिखित संकलन त्रुटि मिलती है:

error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type

अब मेरा समाधान 'एक पैरामीटर' केस को एक अलग परीक्षण विधि में ले जा रहा है।

फिर भी, क्या इस परीक्षा को दूसरों के समान चलाने के लिए कोई तरीका है?

उत्तर

8

एक तरीका TestCaseSource का उपयोग करने के लिए किया जा सकता है, और एक तरीका है जो टेस्टकेस का उपयोग करने के बजाय प्रत्येक पैरामीटर सेट देता है।

3

सवाल 'NUnit cannot recognize a TestCase when it contains an array', संकलन त्रुटि एक bug की वजह से उपजी है, और नामित परीक्षण मामलों के लिए सिंटेक्स के उपयोग से दूर किया जा सकता है, जैसे के जवाब में this answer के आधार पर:

[ExpectedException(typeof(ParametersParseException))] 
[TestCase(new[] { "param1"}, TestName="SingleParam")] 
[TestCase(new[] { "param1", "param2"}, TestName="TwoParams")] 
[TestCase(new[] { "param1", "param2", "param3", "optParam4", "optParam5"}, "some extra parameter", TestName="SeveralParams")] 
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args) 
{ 
    new ParametersParser(args).Parse(); 
} 
+0

आप एक ReSharper से लिंक मुद्दा, जबकि समस्या नुनिट में प्रतीत होती है ... किसी भी मामले में, लगता है कि resharper समस्या हल हो गई है – Noctis

+1

इसे 'नया [] {...}' के साथ कर रहा है जहां सरणी स्ट्रिंग का है त्रुटि CS0182 द्वारा संदर्भित ऊपर ओपी। इंटीजर प्रकार ठीक से काम करते प्रतीत होते हैं। – Brandon