2012-11-11 17 views
7

पर लिखें मैं जावा में प्रोग्रामिंग प्रतियोगिता के लिए कुछ कोड लिख रहा हूं। कार्यक्रम में इनपुट stdin का उपयोग करके दिया जाता है और आउटपुट stdout पर है। आप स्टडीन/स्टडआउट पर काम करने वाले प्रोग्रामों का परीक्षण कैसे कर रहे हैं?स्टडीन से पढ़े गए परीक्षण जावा प्रोग्राम और stdout

के बाद से System.in प्रकार InputStream की है और System.out प्रकार PrintStream की है, मैं अपने कोड एक समारोह में इस प्रोटोटाइप के साथ लिखा है::

void printAverage(InputStream in, PrintStream out) 

अब, मैं होता यह है कि मैं क्या सोच रहा हूँ है जूनिट का उपयोग करके इसका परीक्षण करना पसंद है। मैं एक स्ट्रिंग का उपयोग कर System.in को नकली करना चाहता हूं और स्ट्रिंग में आउटपुट प्राप्त करना चाहता हूं।

@Test 
void testPrintAverage() { 

    String input="10 20 30"; 
    String expectedOutput="20"; 

    InputStream in = getInputStreamFromString(input); 
    PrintStream out = getPrintStreamForString(); 

    printAverage(in, out); 

    assertEquals(expectedOutput, out.toString()); 
} 

'सही' getInputStreamFromString() और getPrintStreamForString() लागू करने के लिए तरीका क्या है?

क्या मैं इसे और अधिक जटिल बनाने की आवश्यकता है?

+1

शायद http://stackoverflow.com/questions/782178/how-do-i-convert-a-string-to-an-inputstream-in-java और http://stackoverflow.com/questions/216894/ get-a-outputstream-in-a-string मदद कर सकता है ... – tcovo

+0

[नकली उपयोगकर्ता इनपुट के साथ जुनीट परीक्षण] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/6415728/junit-testing-with-simulated-user -इनपुट) –

उत्तर

6

निम्नलिखित का प्रयास करें:

String string = "aaa"; 
InputStream stringStream = new java.io.ByteArrayInputStream(string.getBytes()) 

stringStream एक धारा है कि इनपुट स्ट्रिंग से चार्ड पढ़ा जाएगा।

OutputStream outputStream = new java.io.ByteArrayOutputStream(); 
PrintStream printStream = new PrintStream(outputStream); 
// .. writes to printWriter and flush() at the end. 
String result = outputStream.toString() 

printStream एक PrintStream कि outputStream जो बारी में एक स्ट्रिंग वापस जाने के लिए सक्षम हो जाएगा करने के लिए लिखेंगे है।

+0

क्या आपका मतलब प्रिंटवाइटर के बजाय प्रिंटस्ट्रीम था? – user674669

+0

हां। मैं प्रिंटवाइटर की आवश्यकता के रूप में शुरुआत में सवाल को गलत तरीके से पढ़ता हूं –

0

संपादित: क्षमा करें, मैं आपके प्रश्न को गलत तरीके से पढ़ता हूं।

स्कैनर या bufferedreader के साथ पढ़ें, उत्तरार्द्ध पूर्व की तुलना में बहुत तेज है।

Scanner jin = new Scanner(System.in); 

BufferedReader reader = new BufferedReader(System.in); 

प्रिंट लेखक के साथ stdout लिखें। आप सिसो को सीधे प्रिंट भी कर सकते हैं लेकिन यह धीमा है।

System.out.println("Sample"); 
System.out.printf("%.2f",5.123); 

PrintWriter out = new PrintWriter(System.out); 
out.print("Sample"); 
out.close(); 
+0

आप 'System.in' को BufferedReader में पास नहीं कर सकते हैं। आपको पहले इसे 'इनपुटस्ट्रीम रीडर' में लपेटने की आवश्यकता है। – byxor