如何在测试查找期间将 MavenProject 注入到 mojo 中?

yeg*_*256 6 java maven

这是我的测试(maven-plugin-testing-harness 3.3.0,junit 5.6.2):

import java.io.File;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public final class MyMojoTest extends AbstractMojoTestCase {
  @BeforeEach
  public void setup() throws Exception {
    this.setUp();
  }
  @Test
  public void executeIt() throws Exception {
   final File pom = new File("src/test/resources/my-test-pom.xml");
    final MyMojo mojo = MyMojo.class.cast(
      this.lookupMojo("mygoal", pom)
    );
    mojo.execute();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的MyMojo(maven-plugin-api 3.8.4):

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

@Mojo(name = "my", defaultPhase = LifecyclePhase.COMPILE)
public final class MyMojo extends AbstractMojo {
  @Parameter(defaultValue = "${project}", readonly = true)
  private MavenProject project;
}
Run Code Online (Sandbox Code Playgroud)

问题是mojo返回的lookupMojo()没有project设置属性(它是null)。

这里提出了一些解决方案,但我不确定它如何与 JUnit 5 一起工作。

Tri*_*riS 5

我尝试使用与上面提到的相同的配置。该插件工作正常,但似乎没有一个测试lookupMojo()有效。

类似的测试例子可以参考这里setUp您的课程MyMojoTest和链接中提供的示例的方法有所不同。
super.setUp(); 应该调用而不是this.setUp()初始化类中的所有对象AbstractMojoTestCase

maven-plugin-testing-harness 3.3.0 带有和的测试用例junit 5.6.2无法工作的可能原因是它们不是compatible
原因是

  1. maven-plugin-testing-harness被构建为与 兼容Junit4。最新更新是很久以前的事,即 2014 年 12 月 17 日。Junit 4并且Junit 5不兼容。我们必须利用Junit-Vintage-Engine它才能发挥作用。
  2. maven-plugin-testing-harness是使用 is 开发的JDk-7,其最低要求Junit 5Jdk-8. harness来自插件清单文件的信息

实现供应商 ID:org.apache.maven.plugin-testing
构建者:igor
Build-Jdk:1.7.0_55
规范供应商:Apache 软件
基金会 规范标题:Maven 插件测试机制

  1. 这两个 jar 支持的 Maven 版本也不同。 关联

很少有其他链接证实了这一点。

可用于 Junit5 插件测试的库和信息链接非常少。尽管我还没有尝试过,但我只能找到其中的一小部分。

图书馆:

<dependency>
    <groupId>com.soebes.itf.jupiter.extension</groupId>
    <artifactId>itf-assertj</artifactId>
    <version>0.11.0</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

此链接中还有更多 Jupiter 扩展库

与之相关的例子。