Запуск консольной программы в другом проекте: два способа тестирования
При тестировании консольных Java-приложений может возникнуть необходимость запускать их внутри тестового проекта. Я приведу два способа выполнения этой задачи, которые я нашла.
1. Добавление в локальный репозиторий и использование через зависимость
Этот способ позволяет добавить консольное приложение в локальный репозиторий Maven и использовать его как зависимость в проекте с тестами.
1. Для начала нужно установить консольное приложение в локальный репозиторий maven.
- Переходим в директорию проекта с консольным приложением где храниться pom.xml файл. Чаще всего это корневая директория проекта.
- Выполняем команду
2. Добавляем зависимость в проект с тестами.
Теперь, когда артефакт установлен в локальный репозиторий, добавьте его как зависимость в pom.xml тестового проекта:
Пример:
Данные, которыми нужно заполнить, берем из pom.xml в консольном приложении.
3. Запуск приложения в коде:
В коде можно запустить консольное приложение следующим образом:
Однако в таком случае программа будет выполняться в текущем потоке Java-процесса и не сможет получать пользовательский ввод через System.in. Наверняка есть способы получать пользовательский ввод, но я их не рассматривала.
2. Использование Maven-плагина exec-maven-plugin
Тут я выделю еще два разных способа запуска приложения в тестах.
Способ 1. Запуск консольного приложения в проекте с тестами с использованием jar файла из локального репозитория maven.
1. Для начало нужно добавить консольное приложение в локальный репозиторий maven. Этот пункт был рассмотреть в примере выше.
2. В pom.xml добавить плагин
Тут очень важно, что в mainClass нужно указать пусть до исполняемого файла в проекте с консольным приложением.
3. В pom.xml добавить зависимость с проектом консольного приложения.
4. Запустить приложение в программе с тестами
Способ 2. Запуск консольного приложения в проекте с тестами с прямым указанием пути на jar файл.
1. Нужно собрать jar файл с консольной программой.
Для удобства я положила его в проект с тестами, но можно в другое место. Сделать это можно используя интерфейс intellij idea или средства maven.
Я использую интерфейс, мне так удобнее.
2. Добавляем зависимость на проект с консольной программой в pom.xml в проекте с тестами с указанием пути до jar файла в systemPath.
3. Добавляем плагин mvn-exec как было описано выше.
4. Пример запуска.
Я запускала саму консольную программу используя expect скрипты для запуска программы используя TestNG.
Пример простого скрипта:
Пример теста:
Можно запустить тест из проекта с тестами просто используя команду:
Все представленные способы позволяют запускать консольное приложение в тестовом проекте, даже если оба проекта находятся в разных git репозиториях.
Первый метод удобен, если необходимо работать с кодом программы напрямую и эмулировать пользовательский ввод.
Второй метод полезен, если требуется запускать программу в отдельном процессе через Maven. Я использовала последний способ.
Это позволило запускать консольную программу для проверки ее с использованием expect скриптов, т.к. программа представляла из себя консольное меню по работе с файлом.