Мне нужно протестировать основной метод, я хочу отправить данные в System.in, а затем посмотреть, что выйдет из System.out.
Я делаю это так:
public class Check3_1 {
public static void main(String[] args) throws UnsupportedEncodingException {
InputStream originalIn = System.in;
PrintStream originalOut = System.out;
String input = "steve\n";
String expectedOutput = "Hello, steve";
InputStream stream = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8));
// BufferedInputStream bis = new
ByteArrayInputStream bais = new ByteArrayInputStream(new byte[100]);
ByteArrayOutputStream baos = new ByteArrayOutputStream(100);
PrintStream ps = new PrintStream(baos);
System.setIn(bais);
System.setOut(ps);
Homework_3.main(args);
String output = baos.toString(StandardCharsets.UTF_8.name());
System.setIn(originalIn);
System.setOut(originalOut);
System.out.println("actual output: "+output);
System.out.println("correct?: "+output.equals(expectedOutput));
}
}
Есть ли лучший способ сделать это? Есть ли какой-нибудь трюк, который я могу использовать, чтобы отправлять данные на ввод после проверки промежуточного вывода? Возможно, реализация потока ввода, которую я могу использовать для постоянной отправки новых строк? И, возможно, какой-то поток печати, который я могу использовать, чтобы увидеть какой-то промежуточный вывод?