Intereting Posts

Выполнение модульных тестов Maven с помощью метода classpath, установленного для созданного JAR проекта

Некоторые модульные тесты в моем приложении связаны с поиском и управлением определенными файловыми ресурсами, которые являются частью самого приложения. Мне нужно, чтобы эти тесты выполнялись в реальных производственных настройках приложения, где он развертывается как файл JAR, а не как взорванный каталог.

Как я могу дать указание Maven выполнить мои модульные тесты, рассматривая в качестве пути к classам созданный проектом файл jar (и любые другие объявленные зависимости библиотеки) вместо скомпилированных classов в файловой системе, как это делается по умолчанию ?.

Другими словами, прямо сейчас classpath для моих модульных тестов имеет значение: /$PROJECTPATH/target/classes/ .

Вместо этого я хотел бы, чтобы этот путь к classам был установлен: /$PROJECTPATH/target/myjarfile.jar .

Я попытался вручную добавить и удалить classы зависимостей, как описано здесь: http://maven.apache.org/plugins/maven-surefire-plugin/examples/configuring-classpath.html , но до сих пор он не работает.

Мой текущий проект POM выглядит следующим образом:

   4.0.0 org.mygroupid myartifact 0.0.1-SNAPSHOT  ...     org.apache.maven.plugins maven-compiler-plugin 2.1  1.7 1.7    org.apache.maven.plugins maven-source-plugin 2.1.2   attach-sources  jar      org.apache.maven.plugins maven-dependency-plugin 2.4  runtime ${project.build.directory}/lib    copy-dependencies process-resources <!-- package -->  copy-dependencies      org.apache.maven.plugins maven-surefire-plugin 2.12.3    ${project.build.outputDirectory}     ${project.build.directory}/${project.build.finalName}.${project.packaging}        во   4.0.0 org.mygroupid myartifact 0.0.1-SNAPSHOT  ...     org.apache.maven.plugins maven-compiler-plugin 2.1  1.7 1.7    org.apache.maven.plugins maven-source-plugin 2.1.2   attach-sources  jar      org.apache.maven.plugins maven-dependency-plugin 2.4  runtime ${project.build.directory}/lib    copy-dependencies process-resources <!-- package -->  copy-dependencies      org.apache.maven.plugins maven-surefire-plugin 2.12.3    ${project.build.outputDirectory}     ${project.build.directory}/${project.build.finalName}.${project.packaging}        

Заранее благодарю за любую помощь!.

Стандартные модульные тесты, выполненные как часть фазы жизненного цикла тестирования, не могут видеть проект JAR, поскольку этап test выполняется до фазы package , поэтому ваши тесты выполняются до того, как Maven генерирует JAR. См. Эту страницу для списка фаз жизненного цикла и их порядка.

Что вы хотите, чтобы он запускал ваши тесты в качестве интеграционных тестов, которые выполняются на этапе integration-test .

Существует несколько руководств по настройке Maven для запуска интеграционных тестов. Здесь и здесь есть пара стартеров. Защищенный плагин обычно используется для выполнения интеграционных тестов.

Я не могу точно вспомнить, если в тестах интеграции используются target/classes или JAR-файл вашего проекта в пути к classам. Но если это не так, вы всегда можете создать другой проект Maven, добавьте туда свои тесты и добавьте основной проект в зависимость от этого проекта интеграции. В некоторых случаях это может быть предпочтительнее использовать этап интеграции интеграции в основном проекте, если это не просто стандартная библиотека Java, например, если вы пишете обработчик annotations.