У меня есть класс, в котором пользователь взаимодействует в окне терминала и вводит определенные параметры, основываясь на этих параметрах, он делает коммутатор и использует определенные методы; Мне нужно использовать сканер для обнаружения ввода пользователя.Как имитировать пользовательский ввод для сканера?
Я пробовал несколько дней, чтобы создать тестовый класс для имитации ввода пользователя, но я не могу найти правильный способ сделать это, так как я не могу имитировать System.in для сканера, и ни я не нашел никакой конкретной информации, я что-то про буферизацию, но я не могу это использовать.
Произошла попытка, вызвавшая исключение nullPointerException для сканера - поскольку вход не обнаружен. Я также попытался спать, а затем установить вход.
Пример симуляции System.in для сканера был бы очень признателен.
public void test1addItem()
{
InputStream input = new ByteArrayInputStream("".getBytes());
String data1="1"; //Add an item option
String data2="bread"; //The item to add
input = new ByteArrayInputStream(data1.getBytes());
//System.out.println("DATA1="+input);
System.out.println("TEMP - 1");
System.setIn(input);
System.out.println("TEMP - 2");
tsl.start(); //reference to the class which I am testing
System.out.println("TEMP - 3");
try {
Thread.sleep(2000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
System.out.println("TEMP - 4");
input = new ByteArrayInputStream(data2.getBytes());
System.out.println("TEMP - 5");
System.setIn(input);
System.out.println("TEMP - 6");
}
Он останавливается в TEMP - 2, так как это рекурсивный метод, пока определенный параметр не задан, чтобы завершить программу.
* «Вот попытка, которая приводит к исключению nullPointerException для сканера - поскольку нет обнаруженного входа» * Stacktrace? – Tom
* «Он останавливается при TEMP-2, поскольку это рекурсивный метод, пока не будет предоставлена определенная опция для завершения программы». * Итак, почему бы вам не указать, что определенная опция в качестве входных данных вместо использования пустой строки? – Tom
Почему бы не использовать новый сканер (новый файл («simulatedUserInput.txt»)), а не пытаться издеваться над 'System.in'? –