2009-09-05 17 views
11

मैं एनयूनीट और TestDriven.NET प्लगइन के साथ यूनिट परीक्षण लिख रहा हूं। मैं इस तरह के एक परीक्षण विधि के लिए मानकों को प्रदान करने के लिए करना चाहते हैं:मैं testDriven.NET के साथ परीक्षण विधि पैरामीटर कैसे निर्दिष्ट करूं?

[TestFixture] 
public class MyTests 
{ 
    [Test] 
    public void TestLogin(string userName, string password) 
    { 
     // ... 
    } 

    ... 
} 

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

जब मैं इस परीक्षण चलाने का प्रयास, मैं उत्पादन विंडो में निम्न संदेश मिलता है:

testcase 'MyProject.MyTests.TestLogin' निष्पादित नहीं: नहीं तर्क

प्रदान किया गया तो मेरा सवाल है, मैं इन पैरामीटर कैसे प्रदान करूं? मुझे टेस्टड्रिवेन.नेट को एक प्रॉम्प्ट प्रदर्शित करने की उम्मीद थी ताकि मैं मान दर्ज कर सकूं, लेकिन यह नहीं ...

क्षमा करें अगर मेरा प्रश्न बेवकूफ लगता है, तो जवाब शायद बहुत आसान है, लेकिन मुझे कुछ भी नहीं मिला गूगल पर उपयोगी ...


संपादित करें: मैं बस यह करने के लिए एक रास्ता मिल गया है, लेकिन यह एक गंदा चाल है ...

[Test, TestCaseSource("PromptCredentials")] 
    public void TestLogin(string userName, string password) 
    { 
     // ... 
    } 

    static object[] PromptCredentials 
    { 
     get 
     { 
      string userName = Interaction.InputBox("Enter user name", "Test parameters", "", -1, -1); 
      string password = Interaction.InputBox("Enter password", "Test parameters", "", -1, -1); 
      return new object[] 
      { 
       new object[] { userName, password } 
      }; 
     } 
    } 

मैं अभी भी एक बेहतर समाधान में दिलचस्पी रखता हूँ ..

+3

मुझे लगता है कि यदि आप ऐसा करते हैं तो आपको सीआई (सतत Itegration) वातावरण में स्वचालित रूप से अपने परीक्षण चलाने में परेशानी होगी। – 7wp

+0

आप बिल्कुल सही हैं। हालांकि, यह एक छोटी सामुदायिक परियोजना है, इसलिए सीआई वास्तव में कम से कम एक मुद्दा नहीं है। –

उत्तर

2

यूनिट टेस्ट सामान्य रूप से कोई पैरामीटर नहीं लेना चाहिए। आप परीक्षण के भीतर आवश्यक डेटा बनाते हैं।

  • की उम्मीद मूल्य
  • आप अपने विधि कॉल आप आवश्यक तर्क गुजर परीक्षण करना चाहते हैं
  • आप की उम्मीद मूल्य और अपने परीक्षण किया विधि से दिए गए मान के साथ परिणाम की तुलना

एमएस यूनिट परीक्षण पैरामीटर को परीक्षण करने की अनुमति नहीं देते हैं। इसके बजाय आपको Datadriven Unit tests बनाने की आवश्यकता है। लिंक आज़माएं, यह आपकी मदद कर सकता है।

जैसा कि मैंने उल्लेख किया है। मैं यूनिट परीक्षणों को अच्छी प्रैक्टिस में गुजरने वाले तर्कों की घोषणा नहीं करूंगा।


अद्यतन: मैं जवान :) था। NUnit परीक्षणों के पैरामीटर को पारित करने के तरीके के बजाय सरफ्राज़ के उत्तर पर विचार करें।

+1

धन्यवाद, लेकिन फिर से, यह मेरी समस्या का समाधान नहीं करता है ... मुझे एक परीक्षण चलाने के लिए कैसे माना जाता है जिसके लिए प्रमाण-पत्र की आवश्यकता होती है? मैं अपने व्यक्तिगत उपयोगकर्ता नाम और पासवर्ड को ऐसे कोड में नहीं रखना चाहता हूं जो दूसरों के साथ साझा किया जाएगा ... –

+0

ऐसे मामले में डमी प्रमाण-पत्र का उपयोग करें। आपका यूनिट परीक्षण एसटी को कवर करने के लिए किस प्रकार का तर्क है। आपको क्रेडेंशियल हैंडलिंग आदि की आवश्यकता है? – Juri

+0

ओह, अब मैं आपकी संपादित पोस्ट पढ़ता हूं। क्या आप बस कुछ डमी प्रमाण-पत्रों का उपयोग नहीं कर सके। एक परीक्षण-उपयोगकर्ता + पास जिसे आपको प्राप्त करने के लिए आवश्यक पहुंच का अधिकार है? हालांकि मुझे पूरा यकीन नहीं है कि आप किस तरह की चीज तक पहुंचना चाहते हैं, वास्तव में एक यूनिट टेस्ट द्वारा परीक्षण किया जाना चाहिए। http://stackoverflow.com/questions/1257560/when-is-a-test-not-a-unit-test/1369982#1369982 – Juri

2

मुझे लगता है कि आप NUnit के लिए RowTest प्लगइन का उपयोग करके इस समस्या को हल कर सकते हैं http://www.andreas-schlapsi.com/2008/01/29/rowtest-extension-120/

आप सरल डेटा-संचालित टेस्ट बना सकते हैं जहां परीक्षण डेटा [पंक्ति] विशेषताओं द्वारा प्रदान किया जाता है। तो यहाँ एक परीक्षण है कि अधिक से अधिक विभिन्न मापदंडों के साथ फिर से चलाया जाता है का एक उदाहरण है:

[TestFixture] 
public class RowTestSample 
{ 
[RowTest] 
[Row(1000, 10, 100.0000)] 
[Row(-1000, 10, -100.0000)] 
[Row(1000, 7, 142.85715)] 
[Row(1000, 0.00001, 100000000)] 
[Row(4195835, 3145729, 1.3338196)] 
public void DivisionTest(double numerator, double denominator, double result) 
{ 
    Assert.AreEqual(result, numerator/denominator, 0.00001); 
} 
} 
+2

आपके उत्तर के लिए धन्यवाद। मुझे लगता है कि यह प्लगइन NUnit 2.5 (http://nunit.org/index.php?p=testCase&r=2.5) में टेस्टकेसएट्रिब्यूट द्वारा अप्रचलित बना दिया गया है। वैसे भी, यह मेरी समस्या का समाधान नहीं करता है: मैं अपने प्रमाण-पत्रों को हार्ड-कोड नहीं करना चाहता हूं। जब परीक्षण चल रहा है तो मैं इसे मैन्युअल रूप से दर्ज करने के लिए एक संकेत चाहता हूं –

+0

आह ठीक है। मैंने गलत समझा। हालांकि TestCaseAttribute के बारे में जानना अच्छा लगता है :) – 7wp

22

TestCase विशेषता का उपयोग करें।

[TestCase("User1", "")] 
[TestCase("", "Pass123")] 
[TestCase("xxxxxx", "xxxxxx")] 
public void TestLogin(string userName, string password) 
{ 
    // ... 
} 
+2

+1। यह "विधि में कोई तर्क नहीं" तोते के बजाय टेस्टकेस() पैरामीटर में निर्भरता इंजेक्शन को सही तरीके से संभालने के द्वारा चुने गए उत्तर से कहीं बेहतर है। दुर्भाग्यवश, मुझे नहीं लगता कि एमएस यूनिट टेस्ट में ऐसा कुछ भी है, सिर्फ नुनिट – DeepSpace101

+2

यह सही और संक्षिप्त उत्तर है। इससे कोई फर्क नहीं पड़ता कि यह एक अच्छा या बुरा अभ्यास है। –

+0

कृपया इसे सही उत्तर के रूप में चिह्नित करें। यह सवाल का जवाब देता है और मेरे लिए आम तौर पर पैरा का उपयोग करने के लिए बुरा अभ्यास नहीं है।पासवर्ड के लिए मैं कम इच्छुक होगा। – Rexxo

0

मैं अन्य उत्तर है कि गुजर तर्क सबसे अच्छा अभ्यास नहीं किया जा सकता से सहमत हैं, लेकिन न तो साख या सर्वर पते कि कुछ बिंदु पर बदल सकते हैं कोडिंग कठिन है।

प्रश्न में सुझाए गए समाधान से प्रेरित, मैं बस इनपुट बॉक्स का उपयोग करने के बजाय कंसोल इनपुट पढ़ता हूं। तर्क एक फ़ाइल में सहेजे गए हैं। परीक्षण शुरू करते समय, फ़ाइल को पुनर्निर्देशित किया जाता है और कुछ प्रारंभिक फ़ंक्शन से पढ़ा जाता है जिसे किसी परीक्षण केस चलाने से पहले बुलाया जाना चाहिए।

nunit tests.dll < test.config 

यह उपयोगकर्ता की बातचीत से बचाता है और किसी भी स्वचालन स्क्रिप्ट द्वारा इसे चलाने योग्य होना चाहिए। डाउनसाइड यह है कि पासवर्ड को अभी भी कहीं सेव किया जाना है, लेकिन कम से कम इसे टेस्टर्स मशीन पर स्थानीय से बचाया जा सकता है और इसे बदलने में आसान है।

यह एक परियोजना है, जहां परीक्षण युक्त पत्रक उत्कृष्टता के लिए किया गया था (नहीं परिभाषा से इकाई परीक्षण) दूसरों किसी भी कोड को बदले बिना एक बड़ा सर्वर साइड परियोजना के लिए परीक्षण मामलों बनाने के लिए इस्तेमाल किया गया। अगर सभी परीक्षण मामलों को एक विशाल एक्सेल शीट में मजबूर होना पड़ता तो यह बुरा होता। इसके अलावा कोई सीआई नहीं था, विभिन्न सर्वरों पर बस कई परीक्षण वातावरण थे।

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