У меня есть класс, в котором пользователь взаимодействует с окном терминала и вводит определенные параметры, на основе этих параметров он переключается и использует определенные методы; Мне нужно использовать сканер для обнаружения пользовательского ввода.
Несколько дней я пытался создать тестовый класс для имитации пользовательского ввода, но я не могу найти правильный способ сделать это, так как я не могу имитировать System.in для сканера, и я не нашел никакой конкретной информации, я видел что-то о буферизация, но я не могу ее использовать.
Вот попытка, которая приводит к исключению nullPointerException для сканера, потому что ввод не обнаружен. Я также пытался заснуть, а затем установить ввод.
Пример моделирования System.in для Scanner был бы очень признателен.
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, так как это рекурсивный метод до тех пор, пока не будет задана определенная опция для завершения программы.
new Scanner(new File("simulatedUserInput.txt"))
вместо того, чтобы пытаться издеваться надSystem.in
? - person Luiggi Mendoza   schedule 20.10.2015