Esta es mi prueba (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(); } } Esto es lo que tengo en 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; } El problema es que mojo devuelto por lookupMojo() no tiene el conjunto de atributos del project (es null ).
Aquí se propuso alguna solución, pero no estoy seguro de cómo puede funcionar con JUnit 5.
AbstractMojoTestCase.lookupConfiguredMojo()Considere la implementación de la clase de prueba como ejemplo: maven-plugin-testing/ParametersMojoTest.java en maven-plugin-testing-3.3.0 · apache/maven-plugin-testing .
Teniendo en cuenta este ejemplo, tenga en cuenta el enfoque de creación de instancias de Mojo:
El método readMavenProject() .
La creación de instancias de Mojo utiliza los readMavenProject() y lookupConfiguredMojo() :
MavenProject project = readMavenProject( new File( "src/test/projects/default" ) ); ParametersMojo mojo = (ParametersMojo) lookupConfiguredMojo( project, "parameters" ); Este enfoque de creación de instancias de Mojo proporciona al Mojo instanciado el valor correcto del parámetro MavenProject .
pom.xml para el complemento: usa el código auxiliar del proyecto Es necesario actualizar el archivo test pom.xml introduciendo el elemento project (del elemento de configuration ) con el stub.
Por ejemplo:
<project> <…> <build> <plugins> <plugin> <artifactId>touch-maven-plugin</artifactId> <configuration> <project implementation="org.apache.maven.plugin.testing.stubs.MavenProjectStub"> <groupId implementation="java.lang.String">test-group-id</groupId> <artifactId implementation="java.lang.String">test-artifact-id</artifactId> <version implementation="java.lang.String">1.0.0-SNAPSHOT</version> </project> <…> </configuration> </plugin> </plugins> </build> </project>Probé con las mismas configuraciones mencionadas anteriormente. El complemento funciona bien, pero ninguna de las pruebas que tienen lookupMojo() parece estar funcionando.
Un ejemplo de prueba similar se puede consultar aquí . Hay una diferencia en el método de MyMojoTest setUp el ejemplo proporcionado en el enlace.
super.setUp(); debe llamarse en lugar de this.setUp() para inicializar todos los objetos en la clase AbstractMojoTestCase .
La posible razón por la que el caso de prueba con maven-plugin-testing-harness 3.3.0 y junit 5.6.2 no funcionará porque no son compatible .
las razones son
maven-plugin-testing-harness fue creado para ser compatible con Junit4 . La última actualización fue hace mucho tiempo , es decir, el 17 de diciembre de 2014. Junit 4 y Junit 5 no son compatibles. Tenemos que hacer uso de Junit-Vintage-Engine para que funcione.maven-plugin-testing-harness se desarrolló utilizando JDk-7 y los requisitos mínimos para Junit 5 son Jdk-8 . Información del archivo de manifiesto del complemento de harnessId. de proveedor de implementación: org.apache.maven.plugin-testing
Creado por: igor
Build-Jdk: 1.7.0_55
Especificación-Proveedor: El software Apache
Título de la especificación de la fundación: Mecanismo de prueba del complemento de Maven
Pocos otros enlaces confirman lo mismo.
Hay muy pocas bibliotecas y enlaces informativos disponibles para probar complementos con Junit5. Solo pude encontrar un puñado de ellos, aunque aún no los he probado.
Biblioteca:
<dependency> <groupId>com.soebes.itf.jupiter.extension</groupId> <artifactId>itf-assertj</artifactId> <version>0.11.0</version> <scope>test</scope> </dependency>Algunas bibliotecas de extensión de Júpiter más en este enlace
Ejemplos relacionados con ella.