2016-01-04 14 views
5

Ho un plugin di Maven e un semplice Mojo che sembra un po 'vicino allaMaven Plugin Mojo Configura predefinito Parametro Valori

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; 
}  

Altri Mojos estendendo questo. Quindi, l'idea è di impostare i parametri source* sui valori dei corrispondenti parametri target*. Inoltre sono impostati alcuni valori di default.

Nel test ho qualcosa di simile

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"); 
    } 

} 

La parte di interesse nel file POM nel test sembra

 <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> 

Il test ha esito negativo in quanto tutti i parametri Mojo sono nulli se io mantenere <configuration> commentato, se si decommenta allora è impostato solo scriptsPath. Altri parametri sono null.

Devo fare qualcos'altro nei miei test per avere un Mojo completamente configurato?

ho cercato approccio più a lungo con

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; 
} 

invece di lookupMojo, ma questo non cambiava un po '.

risposta

5

Avrete bisogno di avere la parte <configuration/> e definire i valori che ti interessa. Ci si aspetterebbe che fosse un po 'più intelligente, ma in realtà ciò che il cablaggio di prova non è, si legge i valori dal <configuration/> e ignora quelli delle tue annotazioni. L'imbracatura di test lascia molto a desiderare, in realtà non carica i valori come una corretta esecuzione/interpolazione di Maven ... Quindi, consiglierei di usare lo maven-invoker-plugin, se è più adatto alle vostre esigenze.

+2

Sembra che 'maven-plugin-testing-harness' abbia una lunga strada da percorrere. – EvgeniySharapov

+0

Oh, sembra che sia così, ma ti assicuro che è stato così da quando è uscito Maven 2.x, quindi ... Potrebbe davvero volerci un po 'di tempo prima (se mai) questo viene affrontato. – carlspring

+1

c'è una risposta correlata in http://stackoverflow.com/questions/31528763/how-to-populate-parameter-defaultvalue-in-maven-abstractmojotestcase/36064396 - la risposta suggerisce l'uso di mojoRule.lookupConfiguredMojo() che sembra impostare le impostazioni predefinite sui parametri. – wemu

Problemi correlati