2016-01-04 6 views
5

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.

Antwort

5

Sie müssen den <configuration/> Teil haben und definieren Sie die Werte, die Sie interessieren. Sie würden erwarten, dass es ein wenig schlauer ist, aber in der Tat, was das Testkabel tut, liest es die Werte von <configuration/> und ignoriert die aus Ihren Anmerkungen. Der Test-Kabelbaum lässt viel zu wünschen übrig, er lädt nicht wirklich die Werte für Sie wie eine ordentliche Maven-Ausführung/Interpolation ... Daher würde ich die Verwendung des maven-invoker-plugin empfehlen, wenn es Ihren Anforderungen besser entspricht.

+2

Es scheint, als hätte 'maven-plugin-testing-harness' noch einen langen Weg vor sich. – EvgeniySharapov

+0

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

+1

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

Verwandte Themen