2015-07-21 13 views
5

Mam wtyczkę Maven, które próbuję przetestować przy użyciu podklasy AbstractMojoTestCase. Wtyczka Mojo definiuje parametr outputFolder z defaultValue. Ten parametr zasadniczo nie powinien być dostarczany przez użytkownika w POM.Jak wypełnić parametr "defaultValue" w Maven "AbstractMojoTestCase"?

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

Jeśli użyję wtyczki w rzeczywistym scenariuszu, outputFolder zostanie domyślnie ustawiony zgodnie z oczekiwaniami.

Ale gdybym przetestować Mojo pomocą AbstractMojoTestCase wtedy, gdy parametry zdefiniowane w POM testowym są wypełniane, parametry z defaultValue, które nie zostały zdefiniowane w POM nie są wypełniane.

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

dalej: jeśli zdefiniować parametr w POM outputFolder tak:

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

następnie ${project.build.directory} NIE rozwiązany w AbstractMojoTestCase.

Co muszę zrobić, aby uzyskać wartość domyślną podczas testowania?

Czy to błąd w AbstractMojoTestCase?

To Maven-3.2.3, Maven-plugin-plugin-3,2, JDK 8

+0

To jest nieco stary, ale czy kiedykolwiek znaleźć rozwiązanie? Stoję w obliczu tego samego problemu. – GuiSim

+0

Nie, nie, przepraszam @GuiSim. Ale jeśli ** znajdziesz rozwiązanie, proszę, opublikuj to tutaj. – William

+0

Edytuj: patrz odpowiedź. – GuiSim

Odpowiedz

5

Trzeba użyć lookupConfiguredMojo.

Oto, co skończyło się przy użyciu:

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

Oczywiście trzeba wymienić myGoal z celem twojego pluginu. Musisz również dowiedzieć się, jak potwierdzić, że twoja wtyczka została pomyślnie wykonana.

Pełniejszy przykład sprawdzeniu testów napisałem dla fmt-maven-plugin