junit тест с методом включающим Scanner (System.in)

Пожалуйста подскажите или намекните как можно протестировать такой метод? Пользователь должен вводить ответ в консоль, но в junit там же нельзя писать, оно должно брать откуда-то значение. Как мне его туда "отправить"? Стопорюсь на этом моменте

Отдельно методы isTrue и isFalse работают и тестируются.

public boolean run() {
        for (int i = 0; i < REPEAT_COUNT + 1; i++) {
            System.out.println(message);
            String answer = SCANNER.nextLine();

            if (isTrue(answer)) {
                return true;
            }
            if (isFalse(answer)) {
                return false;
            }
            System.out.println("Cant read your answer, try again");
        }

        throw new UncheckedIOException(
                new IOException("Cant read your answer more then 3 times, program close"));
    }

Ответы (2 шт):

Автор решения: Sergey Zh.

Нужно подменить поток ввода для Scanner, вместо System.in указать другой InputStream.

Это можно сделать через System.setIn(...)

@Test
void runTrueAnswerTest() throws IOException {
    ByteArrayInputStream in = new ByteArrayInputStream("yes".getBytes());
    InputStream inputStream = System.in;  // сохраняем ссылку на ввод с клавиатуры
    System.setIn(in);                     // подменяем ввод
    CliSimpleAskView cliSimpleAskView = new CliSimpleAskView("yes or no?");
    assertTrue(cliSimpleAskView.run());
    System.setIn(inputStream);            // подменяем обратно
}

@Test
void runFalseAnswerTest() throws IOException {
    ByteArrayInputStream in = new ByteArrayInputStream("no".getBytes());
    InputStream inputStream = System.in;  
    System.setIn(in);
    CliSimpleAskView cliSimpleAskView = new CliSimpleAskView("yes or no?");
    assertFalse(cliSimpleAskView.run());
    System.setIn(inputStream);
}
→ Ссылка
Автор решения: Xa3uK

Сделал тестовые методы, по отдельности они работают, Scanner подменяется

@Test
    void runTrueAnswerTest() throws IOException {
        ByteArrayInputStream in = new ByteArrayInputStream("yes".getBytes());
        System.setIn(in);
       CliSimpleAskView cliSimpleAskView = new CliSimpleAskView("yes or no?");
        assertTrue(cliSimpleAskView.run());
        System.setIn(System.in);
        System.in.close();
        in.close();

    }

    @Test
    void runFalseAnswerTest() throws IOException {
        ByteArrayInputStream in = new ByteArrayInputStream("no".getBytes());
        System.setIn(in);
        CliSimpleAskView cliSimpleAskView = new CliSimpleAskView("yes or no?");
        assertFalse(cliSimpleAskView.run());
        System.setIn(System.in);
        System.in.close();
        in.close();
    }

Но если запустить все вместе - второй тест не отрабатывает, выдает ошибку:

java.util.NoSuchElementException: No line found

    at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
→ Ссылка