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?
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
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) –