2012-04-16 8 views
5

नीचे दिया गया फ़ंक्शन उपयोगकर्ता से इनपुट प्राप्त करता है। मुझे Unit Testing का उपयोग करके इस फ़ंक्शन का परीक्षण करने की आवश्यकता है। क्या कोई मुझे बता सकता है कि इस तरह के फ़ंक्शन का परीक्षण कैसे करें जिसके लिए उपयोगकर्ता इनपुट गतिशील रूप से आवश्यक है। धन्यवादमैं सी # फ़ंक्शन में यूनिट परीक्षण कैसे लागू करूं जिसके लिए उपयोगकर्ता इनपुट गतिशील रूप से आवश्यक है?

boundary value analysis की तरह ...

numberOfCommands होना चाहिए (0 <= n <= 100)

public static int Get_Commands() 
{ 
    do 
    { 
     string noOfCommands = Console.ReadLine().Trim(); 
     numberOfCommands = int.Parse(noOfCommands);    
    } 
    while (numberOfCommands <= 0 || numberOfCommands >= 100); 

    return numberOfCommands; 
} 

प्रोग्राम संकेत बहुत मदद हो जाएगा!

+0

बस कार्यक्रम चलाते हैं। इनपुट दें क्या आप इकाई परीक्षण से मतलब है? – Sandeep

+0

हाँ यूनिट परीक्षण के लिए .. जैसे 'संख्याऑफ कमांड' के लिए सीमा मान परीक्षण '0 <= n <= 100' होना चाहिए। – rana

उत्तर

10

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

संपादित करें:

public interface IUserInput{ 
    string GetInput(); 
} 

public static int Get_Commands(IUserInput input){ 
    do{ 
     string noOfCommands = input.GetInput(); 
     // Rest of code here 
    } 
} 

public class Something : IUserInput{ 
    public string GetInput(){ 
      return Console.ReadLine().Trim(); 
    } 
} 

// Unit Test 
private class FakeUserInput : IUserInput{ 
     public string GetInput(){ 
      return "ABC_123"; 
     } 
} 
public void TestThisCode(){ 
    GetCommands(new FakeUserInput()); 
} 
+0

+1 "निर्भरता इंजेक्शन" के रूप में भी जाना जाता है। यह सही दृष्टिकोण है। –

0

आप मानक इनपुट के लिए एक फ़ाइल से इनपुट अनुप्रेषित, और प्रयोग है कि अपने परीक्षण में कर सकते हैं। आप प्रोग्राम में प्रोग्रामेटिक रूप से या प्रोग्राम चलाने वाले शेल के माध्यम से ऐसा कर सकते हैं।

आप सब कुछ 'उपयोगकर्ता इनपुट' को अपने स्वयं के वर्गों/कार्यों में भी extrapolate कर सकते हैं ताकि एक ऐसे फ़ंक्शन को प्रतिस्थापित करना आसान हो जो 'उपयोगकर्ता से टेक्स्ट की एक पंक्ति प्राप्त करता है' जो परीक्षण के लिए यह हार्ड कोडित स्ट्रिंग देता है '। यदि इनमें से प्रत्येक कार्य कक्षाओं में है जो एक सामान्य इंटरफेस को लागू करता है तो यह उन्हें बहुत आसान बना देता है।

0

मुख्य में() तुम सिर्फ कर सकते हैं:

int testCommand=Get_Commands(); 
Console.WriteLine(testCommand); 

हालांकि, मुझे लगता है कि अगर परीक्षण के प्रकार आप चाहते थे पता नहीं है। फ़ंक्शन के परिणाम की जांच करने से प्रश्न के लिए और कुछ है?

+0

मेरा मतलब है उपरोक्त फ़ंक्शन के लिए यूनिट परीक्षण !! StringReader के लिए – rana

2

दो आवश्यक बातें:

  1. Console.ReadLine एक बाहरी निर्भरता है और (निर्भरता इंजेक्शन के माध्यम से अधिमानतः)
  2. Console.ReadLine हुड के नीचे TextReader आधार वर्ग का उपयोग करता है किसी तरह से अपनी पद्धति को प्रदान की जानी चाहिए, और यही दिया जाना चाहिए

तो, आपकी विधि की क्या ज़रूरत है TextReader पर निर्भरता (आप सार यह और भी अपने कस्टम इंटरफेस के साथ है, लेकिन परीक्षण के प्रयोजन के लिए यह पर्याप्त है सकते हैं):

public static int Get_Commands(TextReader reader) 
{ 
    // ... use reader instead of Console 
} 

अब, असली आवेदन में आप असली कंसोल का उपयोग Get_Commands आह्वान:

int commandsNumber = Get_Commands(Console.In); 

में अपने इकाई परीक्षण, आप उदाहरण के लिए का उपयोग कर StringReader वर्ग नकली इनपुट बनाएँ:

[Test] 
public void Get_Commands_ReturnsCorrectNumberOfCommands() 
{ 
    const string InputString = 
     "150" + Environment.NewLine + 
     "10" + Environment.NewLine; 
    var stringReader = new StringReader(InputString); 

    var actualCommandsNumber = MyClass.Get_Commands(stringReader); 

    Assert.That(actualCommandsNumber, Is.EqualTo(10)); 
} 
+0

+1 अच्छा है – grinch

0

आप Console.SetIn() औरउपयोग कर सकते हैं इनपुट और आउटपुट को परिभाषित करने के लिए। आउटपुट कैप्चर करने के लिए परीक्षण के इनपुट को परिभाषित करने के लिए स्ट्रिंग रीडर का उपयोग करें, और स्ट्रिंगवाइटर।

आप इस विषय पर अपने ब्लॉग पोस्ट को देख सकता, एक और अधिक पूर्ण विवरण और उदाहरण के लिए: http://www.softwareandi.com/2012/02/how-to-write-automated-tests-for.html

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