Запись данных в System.in - PullRequest
       37

Запись данных в System.in

12 голосов
/ 28 сентября 2010

В нашем приложении мы ожидаем пользовательский ввод в Thread следующим образом:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

Я хочу пройти эту часть в моем модульном тесте, чтобы я мог возобновить поток для выполнения остальнойкод.Как я могу написать что-то в System.in из junit?

Ответы [ 4 ]

26 голосов
/ 28 сентября 2010

То, что вы хотите сделать, это использовать метод setIn() из System. Это позволит вам передавать данные в System.in из junit.

9 голосов
/ 28 сентября 2010

Замените его на время вашего теста:

String data = "the text you want to send";
InputStream testInput = new ByteArrayInputStream( data.getBytes("UTF-8") );
InputStream old = System.in;
try {
    System.setIn( testInput );

    ...
} finally {
    System.setIn( old );
}
5 голосов
/ 28 сентября 2010

Вместо предложенных выше предложений ( edit : я заметил, что Барт также оставил эту идею в комментарии), я бы предложил сделать ваш класс более модульным для тестирования, сделав класс принимающим входной источник какпараметр конструктора или аналогичный (внедрить зависимость).В любом случае класс не должен быть так связан с System.in.

Если ваш класс создан из Reader, вы можете просто сделать это:

0 голосов
/ 12 мая 2018

Мое решение в настоящее время (в 2018 году):

 final byte[] passCode = "12343434".getBytes();
 final ByteArrayInputStream inStream = new ByteArrayInputStream(passCode);
        System.setIn(inStream);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...