Я пишу JUnit для программы, созданной в упражнении. Это означает, что тест должен охватывать как можно больше случаев, и я не влияю на то, как определенные вещи в программе реализованы. Кроме того, программа запускает бесконечный цикл, где в какой-то момент требуется, чтобы пользователь что-то вводил.
Для теста JUnit я запускаю программу в другом Thread
и имитирую пользовательский ввод из JUnit Thread
.Java I/O - Имитировать вход для System.console()
Пока все работает нормально, если программа считывает пользовательский ввод от System.in
, так как этот поток можно легко заменить. Но есть также возможность, что программа взаимодействует с System.console()
, который в настоящее время не может быть покрыт моим тестом.
Есть ли возможность имитировать вход для System.console()
, например. заменив его входной источник другим потоком?
(NB:. Тест JUnit должен использовать Java 6 без каких-либо внешних библиотек (кроме JUnit и Hamcrest))
Edit: К сожалению, я не могу изменить классы программы для тестирования.
Конструктор вашего класса должен принять объект 'Console', чтобы вы могли * вставить * его. Затем в тесте вам нужно будет создать экземпляр * mock * 'Console', который вам нужно будет передать конструктору. –
@SvetlinZarev см. Мое редактирование. Другого пути нет? – darktestuser