ich ein Maven-Plugin und eine einfache Mojo haben, dieMaven Plugin Mojo konfigurieren Standard-Parameterwerte
public abstract class AbstractSetupMojo extends AbstractMojo {
@Parameter(property="targetHost", defaultValue="localhost")
private String targetHost;
@Parameter(property="targetPort", defaultValue="27017")
private Integer targetPort;
@Parameter(property="targetDbName", required=true)
private String targetDbName;
@Parameter(property="sourceHost", defaultValue="${mojo.configuration.targetHost}")
private String sourceHost;
@Parameter(property="sourcePort", defaultValue="${mojo.configuration.targetPort}")
private Integer sourcePort;
@Parameter (property="sourceDbName", defaultValue="${mojo.configuration.targetDbName}")
private String sourceDbName;
@Parameter(property="scriptsPath")
private File scriptsPath;
}
Andere Mojos diese sind erstreckt etwas in der Nähe aussieht. Die Idee ist also, die source*
Parameter auf die Werte der entsprechenden target*
Parameter zu setzen. Außerdem sind einige Standardwerte festgelegt.
Im Test Ich habe so etwas wie
public class GenerateMojoTest extends AbstractMojoTestCase {
protected void setUp() throws Exception {
super.setUp();
}
public void testConfiguration() throws Exception {
File pom = getTestFile("src/test/resources/test-project-1/pom.xml");
assertNotNull(pom);
assertTrue(pom.exists());
GenerateMojo generateMojo = (GenerateMojo)lookupMojo("generate", pom);
assertThat(generateMojo.getSourceDbName()).isEqualTo(generateMojo.getTargetDbName());
assertThat(generateMojo.getSourcePort()).isEqualTo(generateMojo.getTargetPort()).isEqualTo(27017);
assertThat(generateMojo.getSourceHost()).isEqualTo(generateMojo.getTargetHost()).isEqualTo("localhost");
}
}
Der Teil von Interesse in der POM-Datei im Test sieht aus wie
<plugin>
<groupId>com.ffy</groupId>
<artifactId>setup-maven-plugin</artifactId>
<!--
<configuration>
<scriptsPath>src/test/resources/temp</scriptsPath>
</configuration>
-->
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
Der Test schlägt fehl, weil die alle Parameter Mojo null sind, wenn ich keep <configuration>
auskommentiert, wenn ich es auskommentiere dann wird nur scriptsPath
gesetzt. Andere Parameter sind null
.
Muss ich etwas anderes in meinen Tests machen, um ein vollständig konfiguriertes Mojo zu haben?
versuchte ich länger Ansatz mit
protected GenerateMojo setupMojo(final File pom) throws ComponentConfigurationException, Exception {
final MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
final ProjectBuildingRequest buildingRequest = executionRequest.getProjectBuildingRequest();
final ProjectBuilder projectBuilder = this.lookup(ProjectBuilder.class);
final MavenProject project = projectBuilder.build(pom, buildingRequest).getProject();
final MavenSession session = newMavenSession(project);
final MojoExecution execution = newMojoExecution("generate");
final GenerateMojo mojo = (GenerateMojo) this.lookupConfiguredMojo(session, execution);
return mojo;
}
statt lookupMojo
aber das hat nicht ein wenig zu ändern.
Es scheint, als hätte 'maven-plugin-testing-harness' noch einen langen Weg vor sich. – EvgeniySharapov
Oh, es sieht so aus, aber lass mich dir versichern, dass es so war, seit Maven 2.x herausgekommen ist, also ... Es könnte wirklich eine Weile dauern, bevor (wenn überhaupt) dies angesprochen wird. – carlspring
gibt es eine verwandte Antwort in http://stackoverflow.com/questions/31528763/how-to-populate-parameter-defaultvalue-in-maven-abstractmojotestcase/36064396 - die Antwort schlägt vor, mit mojoRule.lookupConfiguredMojo() zu setzen scheint die Standardeinstellungen für Parameter. – wemu