2015-07-21 6 views
5

Ho un plug-in Maven che sto tentando di testare utilizzando una sottoclasse di AbstractMojoTestCase. Il plug-in Mojo definisce un parametro outputFolder con un defaultValue. In genere questo parametro non viene fornito dall'utente nel POM.Come popolare il parametro "defaultValue" in Maven "AbstractMojoTestCase"?

@Parameter(defaultValue = "${project.build.directory}/someOutputFolder") 
private File outputFolder; 

E se utilizzo il plug-in in uno scenario reale, outputFolder viene impostato come predefinito.

Ma se la prova Mojo usando l'AbstractMojoTestCase poi mentre parametri definiti in POM prova sono popolati, parametri con un defaultValue non definiti nel POM non sono popolati.

public class MyPluginTestCase extends AbstractMojoTestCase { 

    public void testAssembly() throws Exception { 
     final File pom = getTestFile("src/test/resources/test-pom.xml"); 
     assertNotNull(pom); 
     assertTrue(pom.exists()); 

     final MyMojo myMojo = (BaselineAssemblyMojo) lookupMojo("assemble", pom); 
     assertNotNull(myMojo); 
     myMojo.execute(); // Dies due to NullPointerException on outputFolder. 
    } 
} 

Inoltre: se io definisco il parametro outputFolder nel POM in questo modo:

<outputFolder>${project.build.directory}/someOutputFolder</outputFolder> 

poi ${project.build.directory} è NON risolta entro l'AbstractMojoTestCase.

Quindi, cosa devo fare per ottenere il valore predefinito popolato durante il test?

Oppure è un errore nello AbstractMojoTestCase?

Questo è Maven-3.2.3, maven-plugin-plugin-3.2, JDK 8

+0

Questo è un po 'vecchio ma avete mai trovato una soluzione? Sto affrontando lo stesso problema. – GuiSim

+0

No, non l'ho fatto, mi dispiace @GuiSim. Ma se ** tu ** trovi una soluzione, per favore, per favore postala qui. – William

+0

Modifica: vedere la risposta. – GuiSim

risposta

5

È necessario utilizzare lookupConfiguredMojo.

Ecco quello che ho finito per usare:

public class MyPluginTest 
{  
    @Rule 
    public MojoRule mojoRule = new MojoRule(); 

    @Test 
    public void noSource() throws Exception 
    { 
     MyPlugin plugin = (MyPlugin) mojoRule.lookupConfiguredMojo(loadPom("testpom1"), "myGoal"); 
     plugin.execute(); 

     assertThat(plugin.getSomeInformation()).isEmpty(); 
    } 

    public File loadPom(String folderName) 
    { 
     return new File("src/test/resources/", folderName); 
    } 
} 

Naturalmente è necessario sostituire myGoal con l'obiettivo del vostro plugin. Devi anche capire come affermare che il tuo plugin sia stato eseguito con successo.

Per un esempio più completo, controllare le prove che ho scritto per fmt-maven-plugin