2015-07-21 12 views
5

Ich habe ein Maven-Plugin, das ich versuche, mit einer Unterklasse der AbstractMojoTestCase zu testen. Das Plugin Mojo definiert einen outputFolder Parameter mit einer defaultValue. Von diesem Parameter wird im Allgemeinen nicht erwartet, dass er vom Benutzer im POM bereitgestellt wird.Wie den Parameter "defaultValue" in Maven "AbstractMojoTestCase" zu füllen?

Und wenn ich das Plugin in einem realen Szenario verwende, wird der outputFolder wie erwartet in die Standardeinstellungen übernommen.

Aber wenn ich die Mojo testen Sie die AbstractMojoTestCase dann mit, während im Test POM definierten Parametern bestückt sind, Parameter mit einem defaultValue, die nicht im POM definiert sind, werden nicht aufgefüllt.

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

Weiter: wenn ich den outputFolder Parameter in der POM definieren wie folgt:

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

dann ist ${project.build.directory}NICHT im AbstractMojoTestCase aufgelöst.

Was also muss ich tun, um beim Testen den Standardwert zu erhalten?

Oder ist das ein Fehler in der AbstractMojoTestCase?

Dies ist Maven-3.2.3, Maven-Plugin-plugin-3.2, JDK 8

+0

Diese etwas alt, aber haben Sie jemals eine Lösung finden? Ich stehe vor dem gleichen Problem. – GuiSim

+0

Nein, habe ich nicht, sorry @GuiSim. Aber wenn ** Sie ** eine Lösung finden, bitte, bitte posten Sie es hier. – William

+0

Bearbeiten: siehe Antwort. – GuiSim

Antwort

5

Sie müssen lookupConfiguredMojo verwenden.

Hier ist, was ich am Ende mit:

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

Natürlich müssen Sie myGoal mit Ihrem Plugin Ziel ersetzen. Sie müssen auch herausfinden, wie Sie bestätigen können, dass Ihr Plugin erfolgreich ausgeführt wurde.

Für ein vollständigeres Beispiel die Tests überprüfen ich für fmt-maven-plugin schrieb