Как я могу тестировать приложения командной строки, используя maven? - PullRequest
3 голосов
/ 12 августа 2010

Я работаю над сложным, многомодульным проектом Maven.Одним из модулей является исполняемый файл jar, который реализует приложение командной строки.Мне нужно тестирование интеграции этого приложения.Мне нужно запустить его несколько раз с несколькими различными командными строками и проверить состояние выхода и stdout / err.Однако я не могу найти плагин для maven, который утверждает, что поддерживает это, а также не может отследить библиотеку JUnit, которая поддерживает тестирование приложений командной строки.

Прежде чем сказать «не тестируйтеОсновной метод - вместо этого делать бла ', в этом случае я действительно делать хочу проверить основной метод, а не некоторые вспомогательные функции.Весь смысл в том, чтобы запустить приложение , как пользователь в своей собственной виртуальной машине и среде, и проверить, работает ли оно само по себе - правильно проанализировать параметры командной строки, выйти из состояния записи и выполнить горячую загрузкуправильные классы из правильных плагинов банок.

Ответы [ 2 ]

1 голос
/ 13 августа 2010

Мой текущий взлом заключается в использовании apache-exec из метода тестирования junit.Кажется, он работает, но настроить его довольно сложно.

public void testCommandlineApp()
        throws IOException
{
    CommandLine cl = new CommandLine(resolveScriptNameForOS("./runme")); // add .sh/.bat
    cl.addArgument("inputFile.xml");

    exec.setWorkingDirectory(workingDir);
    exec.setExitValues(new int[] { 0, 1, 2 });

    int exitCode = exec.execute(cl);

    assertEquals("Exit code should be zero", 0, exitCode);
}
0 голосов
/ 12 августа 2010

Почему бы просто не использовать сценарий оболочки, используя maven-exec-plugin для построения вашего classpath?

STDOUT=$(mvn exec:java -DmainClass=yourMainClass --arg1 --arg2=value2)
RETURN_CODE=$?

# validate STDOUT
# validate RETURN_CODE

Вы даже можете использовать что-то вроде shunit2 , если вы предпочитаете болееструктурированный подход.

...