2016-05-29 3 views
0

У меня есть проект Java, в котором я хочу добавить модульный тест, который maven builds пример проекта (shaded-jar), запускает созданную банку и оценивает записанный выходной файл.Запустить проект как часть тестового модуля?

Я не уверен, что это возможно даже в рамках Единичного теста?

У меня возникли проблемы в прошлом, когда модульные тесты на самом деле проходили, но как только вы создали затененные вещи jar, ломаются из-за некоторых проблем с зависимостями, которые, по-видимому, возникают только в JAR-файлах. Я ищу несколько keywords или еще лучше пример того, как это сделать или как реализовать такой тест интеграции.

+1

Это интеграционный тест, который можно обработать с помощью модуля maven-invoker-plugin, который в первую очередь предназначен для выполнения интеграционных тестов во время разработки плагина maven, но может использоваться и для других целей. Или вы можете проверить exec-maven-plugin, который может помочь здесь также ... – khmarbaise

+0

Спасибо, я взглянул на него. У меня теперь есть шаг, который создается проект 'sample', но я не вижу, как я могу сказать maven, чтобы фактически выполнить этот -jar-файл и передать ему параметры? – toobee

ответ

1

Согласно комментарий по @khmarbaise:

  1. Добавить maven-failsafe-plugin в сборку для выполнения тестов интеграции:

    <plugin> 
        <artifactId>maven-failsafe-plugin</artifactId> 
        <version>2.19.1</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>integration-test</goal> 
           <goal>verify</goal> 
          </goals> 
         </execution> 
        </executions> 
    </plugin> 
    
  2. Запустите банку через maven-exec-plugin. Например:

    <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>1.5.0</version> 
        <executions> 
         <execution> 
          <phase>pre-integration-test</phase> 
          <goals> 
           <goal>exec</goal> 
          </goals> 
          <configuration> 
           <executable>java</executable> 
           <workingDirectory>${project.build.directory}</workingDirectory> 
           <commandlineArgs>-jar ${project.build.finalName}.jar</commandlineArgs> 
          </configuration> 
         </execution> 
        </executions> 
    </plugin> 
    
  3. Run Maven сборки, по крайней мере до verify фазы и т.д .: mvn clean verify.

Важные примечания:

  • Ваш кувшин, вероятно, не возвращается (не раскошелиться в отдельный процесс), так что вы должны будете использовать async=true тоже. Так как asyncDestroyOnShutdown по умолчанию равен true, он должен быть автоматически остановлен при завершении сборки. Если ваши вилки с банками, вы должны остановить процесс раздвоения с помощью собственной команды ручного останова на этапе после интеграции.
  • Это намного проще с войной или uber-jar (включая все зависимости внутри), потому что в противном случае вам нужно также добавить все зависимости от пути к классам, что потребует дополнительных усилий.
  • Если вы используете что-то вроде appassembler-maven-plugin, которое будет обрабатывать путь к классам и запуск, вы можете просто запустить вывод этого плагина.
+0

спасибо, что работает :) – toobee

Смежные вопросы