Java. JUnit имитация пользовательского ввода
Возникла проблема при тестировании функции, в которой присутствует запрос на ввод. При запуске теста, JUnit пропускает запрос на ввод, а каким образом подменить его (ввод) не знаю. (Не судите строго мой говнокод) Тестируемая функция:
public static int checkNumber() {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
int number = -1;
try {
number = Integer.parseInt(reader.readLine());
if (number < 0 || number > 255) {
throw new IOException();
}
return number;
} catch (NumberFormatException n) {
throw new IOException();
}
} catch (IOException e) {
System.out.println(INVALID_INPUT);
}
return -1;
}
Ну и тест по сути должен вызывать эту функцию, подменять ввод и успешно завершаться. Видел, что можно каким - то образом сотворить магию с помощью Mockito, но не понял, может быть есть какие - то другие способы. Буду рад, если вы все подробно объясните, спасибо!
...
Нашел вот такое решение, и оно действительно работает:
ByteArrayInputStream in = new ByteArrayInputStream("My string".getBytes());
System.setIn(in);