Сбой ввода Java Simulate Scanner на консоли с несколькими входами - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь имитировать несколько входов в консоли Java с помощью сканера.Они нужны мне для модульного тестирования, но при сбое только первые несколько значений принимаются правильно, а остальные игнорируются.Пожалуйста, взгляните на следующий код

String simulatedInput = "1\n" + "2\n" + "James\n" + "Snow\n" + "5\n" + "Mango\n" + "6\n";
InputStream in = new ByteArrayInputStream(simulatedInput.getBytes());
Scanner scanner = new Scanner(in);
int index = 0;
if (scanner.hasNextInt()) {
    index = scanner.nextInt();
}
if (index != 1) {
    System.out.println("#1) Should be 1");
}

if (scanner.hasNextInt()) {
    index = scanner.nextInt();
}

if (index != 2) {
    System.out.println("#2) Should be 2");
}
index = -1;
String value = null;
if (scanner.hasNextLine()) {
    value = scanner.nextLine();
}
if (!"James".equals(value)) {
    System.out.println("#3) Should be 'James' but |" + value + "|");
}
if (scanner.hasNextLine()) {
    value = scanner.nextLine();
}
if (!"Snow".equals(value)) {
    System.out.println("#4) Should be 'Snow' but |" + value + "|");
}

if (scanner.hasNextInt()) {
    index = scanner.nextInt();
}
if (index != 5) {
    System.out.println("#5) Should be 5 but " + index);
}

if (scanner.hasNextLine()) {
    value = scanner.nextLine();
}
if (!"Mango".equals(value)) {
    System.out.println("#6) Should be 'Mango' but |" + value + "|");
}

if (scanner.hasNextInt()) {
    index = scanner.nextInt();
}
if (index != 6) {
    System.out.println("#7) Should be 6 but " + index);
}

System.out.println("*** There should be the only line ***");

, и результат выглядит следующим образом: тесты 1 и 2 пройдены, но остальные не срабатывают на входе, который, как ожидается, будет James

#3) Should be 'James' but ||
#4) Should be 'Snow' but |James|
#5) Should be 5 but -1
#6) Should be 'Mango' but |Snow|
#7) Should be 6 but 5
*** There should be the only line ***

Обратите внимание, что я не могу изменить код, так как я тестирую этот код модулем, я могу изменить только мой имитированный ввод.Можно ли это исправить?

Ответ на возможный дубликат

Это не дублирующий вопрос, я не могу изменить код, чтобы он потреблял лишние \ n, я могу вносить изменения только в симулированный ввод.

...