Тестирование командной строки JUnit - PullRequest
1 голос
/ 31 марта 2011

Это уже спрашивалось ранее, но не было разъяснено до такой степени, что я понял. Подобно одному или двум другим потокам, которые я видел по этой теме, я работаю над клиентом чата с входами командной строки для входа / выключения, отключения и т. Д., И я не уверен, как смоделировать это в тесте JUnit дело. В других ответах указывалось, что я должен попытаться изменить System.in на отдельный InputStream, но ... тогда что?

tl; dr: у меня в фактическом коде есть метод для анализа ввода командной строки, и мне нужен способ проверки JUnit, чтобы они были введены и соответствующим образом обработаны.

1 Ответ

1 голос
/ 31 марта 2011

РЕДАКТИРОВАТЬ: Кажется, я неправильно понял вопрос.Я обычно использую термин «ввод из командной строки» для обозначения аргументов командной строки, данных процессу для начала, а не для ввода с интерактивной консоли.Однако ...

Передача вашего реального кода либо другого 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...