2012-11-11 54 views
7

Tôi đang viết một số mã cho cuộc thi lập trình bằng java. Các đầu vào cho chương trình được đưa ra bằng cách sử dụng stdin và đầu ra là trên stdout. Các bạn thử nghiệm các chương trình làm việc trên stdin/stdout như thế nào? Đây là những gì tôi đang suy nghĩ:Kiểm tra các chương trình java đọc từ stdin và viết tới stdout

Kể từ System.in là loại InputStream và System.out là loại PrintStream, tôi đã viết mã của tôi trong một func với mẫu thử nghiệm này:

void printAverage(InputStream in, PrintStream out) 

Bây giờ, tôi sẽ muốn thử nghiệm điều này bằng cách sử dụng junit. Tôi muốn giả mạo System.in bằng cách sử dụng một String và nhận được đầu ra trong một String.

@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()); 
} 

Cách 'chính xác' để triển khai getInputStreamFromString() và getPrintStreamForString() là gì?

Tôi có làm điều này phức tạp hơn mức cần thiết không?

+1

Có thể http://stackoverflow.com/questions/782178/how-do-i-convert-a-string-to-an-inputstream-in-java và http://stackoverflow.com/questions/216894/ get-an-outputstream-into-a-string có thể giúp ... – tcovo

+0

có thể trùng lặp của [kiểm tra JUnit với đầu vào người dùng được mô phỏng] (http://stackoverflow.com/questions/6415728/junit-testing-with-simulated-user -input) –

Trả lời

6

Hãy thử như sau:

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

stringStream là một dòng suối mà sẽ đọc củ cải từ chuỗi đầu vào.

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

printStream là một PrintStream rằng sẽ ghi vào outputStream mà lần lượt sẽ có thể trả về một chuỗi.

+0

Ý của bạn là PrintStream thay vì PrintWriter? – user674669

+0

Có. tôi đã đọc sai câu hỏi ngay từ đầu khi cần một PrintWriter –

0

CHỈNH SỬA: Xin lỗi tôi đã đọc sai câu hỏi của bạn.

Đọc bằng máy quét hoặc bộ đệm, sau này nhanh hơn nhiều so với trước đây.

Scanner jin = new Scanner(System.in); 

BufferedReader reader = new BufferedReader(System.in); 

Viết tới stdout bằng trình ghi in. Bạn cũng có thể in trực tiếp vào Syso nhưng điều này chậm hơn.

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

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

Bạn không thể chuyển 'System.in' vào BufferedReader. Trước tiên, bạn cần bọc nó trong một 'InputStreamReader'. – byxor

Các vấn đề liên quan