2011-01-27 12 views
19

पैरामीटर को संशोधित करना संभव है, मैं एक कॉल करने योग्य फ़ंक्शन लिखना चाहता हूं जो दो ऑब्जेक्ट स्वीकार करता है, और उन ऑब्जेक्ट्स के 30+ गुणों की तुलना करता है। मुद्दा यह है कि यह लगभग 20 मौजूदा यूनिट परीक्षणों और अधिकांश भविष्य के परीक्षणों के लिए किया जाना चाहिए, और हर बार 30+ आवेषण लिखना समय और स्थान उपभोग करने वाला है।क्या यह नूनिट परीक्षण

मैं वर्तमान में एक गैर इकाई परीक्षण समारोह है कि वस्तुओं की तुलना करके "पास" या एक विफलता संदेश के साथ एक स्ट्रिंग देता है, और मान्य करने के लिए है कि प्रत्येक इकाई परीक्षण में एक ज़ोर का उपयोग कर सकते है। हालांकि, यह काफी गन्दा है और मुझे लगता है कि मैं उचित इकाई परीक्षण विधियों के खिलाफ जा रहा हूं।

वहाँ एक समारोह है कि स्थिति की जाँच करने के दावा का उपयोग करता है के अंदर इकाई परीक्षण से प्रतिदेय है बनाने के लिए एक तरीका है?

उत्तर

17

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

public void CheckAsserts(string value) 
{ 
    Assert.IsNotNull(value); 
} 

[TestCase("yes!")] 
public void MyTest(string value) 
{ 
    CheckAsserts(value); 
} 
+0

ठीक वही करता है जो मैं करने की कोशिश कर रहा था, लेकिन दो पैरामीटर के साथ। मेरे पास एक टेस्ट केस के रूप में कार्य था जो मुझे लगता है कि मेरा मुद्दा था। धन्यवाद – NewNetProgrammer

4

हां, यूनिट परीक्षण किसी भी अन्य कोड की तरह हैं।

विशेष रूप से, NUnit.TestCaseAttribute की जाँच करें।

+0

मैंने उसमें देखा था, लेकिन गतिशील मानकों को कैसे सेट अप नहीं किया जा सका। मैं डेटाबेस से स्वचालित रूप से आबादी वाले ऑब्जेक्ट्स के साथ 20+ मैन्युअल रूप से आबादी वाली वस्तुओं की तुलना करना चाहता था। आवेषण के साथ एक शून्य कार्य (एक परीक्षण मामला नहीं) बनाना और कॉल करना कि मेरे यूनिट परीक्षणों से पूरी तरह से काम किया। धन्यवाद – NewNetProgrammer

32

आप ऊपर NUnit 2.5.5 या उपयोग कर रहे हैं, इस testcase विशेषता का उपयोग संभव है।

सामान्य इकाई परीक्षण [टेस्ट] के साथ सजाया जाएगा, लेकिन हम जगह ले सकता है कि के रूप में इस प्रकार है:

[TestCase("0", 1)] 
[TestCase("1", 1)] 
[TestCase("2", 1)] 
public void UnitTestName(string input, int expected) 
{ 
    //Arrange 

    //Act 

    //Assert 
} 

बात उस प्रकार जिस तरह से यह करने के लिए किया जाएगा - स्पष्ट रूप से अलग पैरामीटर ले। मदद के लिए इस पर

देखो: http://nunit.org/?p=testCase&r=2.5

+0

समस्या यह है कि, मेरे परीक्षण के मामले स्थिर नहीं हैं। मेरे पास मैन्युअल रूप से आबादी वाला ऑब्जेक्ट है, और डेटाबेस से पॉप्युलेट किया गया है जिसे मैं तुलना करना चाहता हूं। – NewNetProgrammer

+0

'अपेक्षित' को पैरामीट्रिज्ड टेस्ट के रिटर्न प्रकार के बजाय होना चाहिए, और आपको पैरामीटर के बजाय रिटर्न वैल्यू के साथ टेस्ट केस प्रदान करना चाहिए। –

0

आप testcase विशेषता की आवश्यकता होगी:

[TestCase("string1",...) 
public void test_UnitTest(string Parameter) 
{ 
    ... 
    Assert.AreEqual(Parameter, result) 
} 

ध्यान दें कि यह केवल तार और ints की तरह आदिम डेटा प्रकार के साथ काम करता है - आप का दृष्टांत नहीं कर सकते हैं अपने अपनी कक्षा और इसे पैरामीटर के रूप में उपयोग करें।

+0

मुद्दा यह है कि मैं 30+ विशेषताओं के साथ अपनी खुद की कक्षा वस्तु का उपयोग कर रहा हूं जिसे मैं तुलना करना चाहता हूं। – NewNetProgrammer

1

आप TestCase विशेषता का उपयोग कर सकते हैं:

[TestCase("hostname1parameter")] 
[TestCase("hostname2parameter")] 
public void Example_TestHostName(string hostname) 
{ 
    ... 
} 
0

तुम भी सी # आत्मनिरीक्षण का उपयोग करने से लाभ हो सकता है। यह आपको कोड में निर्दिष्ट किए बिना फ़ील्ड के नाम प्राप्त करने की अनुमति देता है। फिर आप उन्हें नाम से बुला सकते हैं।

System.Attribute [] attrs = System.Attribute.GetCustomAttributes (टी);

यह आपको परीक्षण है कि आप भी अभी तक नहीं लिखा है वर्गों के लिए लागू होगी के कुछ प्रकार के लिखने के लिए अनुमति देता है।

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