【问题标题】:Testing Maven Plugin with JUnit and Working with a Test-POM使用 JUnit 测试 Maven 插件并使用 Test-POM
【发布时间】:2020-01-24 11:11:45
【问题描述】:

我正在开发一个自定义 Maven 插件。对于测试,我使用带有 MojoRule 的 JUnit 测试。测试本身工作正常(我可以阅读测试 pom 中定义的插件配置)。但是,我想测试对项目工件的访问。

到目前为止,我还没有弄清楚如何告诉我的测试类:

  • 将单独的目录视为我的测试项目的源文件夹
  • 在我的插件之前执行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>

【问题讨论】:

    标签: java maven


    【解决方案1】:

    我设法通过将此元素添加到插件的 &lt;configuration&gt; 块中来运行测试:

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

    这使得 Mojo 打印 `Project: MavenProject: null:null:null @"。

    显然,测试工具根本没有提供任何默认值,所以我必须自己在配置中注入MavenProject 的实例。但是,这也解决了我的其他问题,因为我不必运行 package 目标,只需让我的 MavenProjectStub 返回一些我在代码中构建的工件。

    来源:Unit Testing Maven Mojo - Components and parameters are null

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 2012-12-04
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      相关资源
      最近更新 更多