Тестирование плагина Maven с помощью JUnit и работа с Test-POM - PullRequest
1 голос
/ 24 января 2020

Я разрабатываю собственный плагин Maven. Для тестирования я использую тесты JUnit с MojoRule. Само тестирование работает нормально (я могу прочитать конфигурацию плагина, определенную в тестовом ПОМ). Однако я хочу проверить доступ к артефактам проекта.

До сих пор я не понял, как сказать моему тестовому классу:

  • , чтобы рассматривать отдельный каталог как исходная папка для моего тестового проекта
  • , чтобы выполнить package перед моим плагином
  • , чтобы получить MavenProject как поле в моем классе (во время выполнения оно пустое)

Мой класс Mojo выглядит так:

/**
 * Identifies potential actions from the project's source code.
 *
 * @goal identify
 */
public class IdentifyMojo extends AbstractMojo {

  @Parameter(defaultValue = "${project}")
  private MavenProject project;

  @Override
  public void execute() {
    getLog().info("Project: " + project);
    for (Artifact nextArtifact : project.getArtifacts()) {
      getLog().info("Next artifact: " + nextArtifact);
    }
  }

}

Тестовый класс выглядит так:

public class IdentifyMojoTest {

  private static final String TEST_POM_FILE_PATH = "src/test/resources";
  private static final String TEST_POM_FILE_NAME = "test-pom.xml";

  private MojoRule rule = new MojoRule();

  @Ignore("Requires mvn install")
  @Test
  public void execute_loadWithPlexus_noExceptions() throws Exception {
    // Arrange
    String goalName = "identify";
    File testPom = getTestPom();

    // Act
    IdentifyMojo identifyMojo = (IdentifyMojo) rule.lookupMojo(goalName, testPom);
    identifyMojo.execute();

    // Assert

  }

  @Rule
  public MojoRule getRule() {
    return rule;
  }

  @NotNull
  @Contract(" -> new")
  private File getTestPom() {
    return new File(TEST_POM_FILE_PATH, TEST_POM_FILE_NAME);
  }

}

Тестовый POM выглядит так:

<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>test-project</artifactId>

  <build>
    <plugins>
      <plugin>
        <groupId>com.example.maven</groupId>
        <artifactId>example-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

1 Ответ

0 голосов
/ 24 января 2020

Мне удалось запустить тест, добавив этот элемент в блок <configuration> плагина:

<project implementation="org.apache.maven.plugin.testing.stubs.MavenProjectStub"/>

Это заставило Mojo напечатать `Project: MavenProject: null: null: null @".

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

Источник: Модульное тестирование Maven Mojo - Компоненты и параметры равны нулю

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