РЕДАКТИРОВАТЬ: Кажется, я неправильно понял вопрос.Я обычно использую термин «ввод из командной строки» для обозначения аргументов командной строки, данных процессу для начала, а не для ввода с интерактивной консоли.Однако ...
Передача вашего реального кода либо другого InputStream
, либо, возможно, даже Reader
или Scanner
действительно поможет - что угодно, чтобы отделить часть "получения ввода" от консоли.Затем вы можете довольно легко подделать входные данные, используя String в качестве входных данных в тестовом коде, а затем либо преобразовать их в байты и обернуть эти байты в ByteArrayInputStream
, либо заключить строку в StringReader
.
Недостатком этого является то, что нет простого способа сделать эту «паузу» после одной команды для проверки результатов.
Возможно, вы захотите несколько изменить дизайн так, чтобы часть, которая читает вход отделяется от части, которая обрабатывает вход.Часть для чтения может быть очень простым циклом, порядка:
String line;
while ((line = reader.readLine()) != null) {
handleInput(line);
}
Затем вы можете оставить эту часть без проверки в модульных тестах или написать несколько относительно примитивных тестов - но затем вы можете проверить handleInput
экстенсивно, поскольку теперь он отделен от входного источника.
Оригинальный ответ
Если вы извлекли код синтаксического анализа из кода, который действительно запускаетприложение, это просто: запустите этот код и проверьте результаты.Конечно, это будет проще всего, если у вас есть класс, инкапсулирующий параметры.Например, ваш метод main
может выглядеть следующим образом:
public static void main(String[] args) {
Options options = Options.parse(args);
// Use options here
}
Тогда вы можете просто очень просто протестировать Options.parse
.