2016-01-04 2 views
5

У меня есть Maven плагин и простой Mojo, который выглядит несколько близко кMaven Plugin Mojo Настройка по умолчанию значения параметров

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

Другая Mojos расширяет эту. Итак, идея состоит в том, чтобы установить параметры source* на значения соответствующих параметров target*. Также устанавливаются некоторые значения по умолчанию.

В тесте у меня есть что-то вроде

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

} 

Часть интереса в файле POM в тесте выглядит

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

Тест терпит неудачу, потому что все параметры Mojo равны нулю, если я keep <configuration> закомментировал, если я раскомментирую его, то установлен только scriptsPath. Другие параметры: null.

Должен ли я сделать что-то еще в своих тестах, чтобы иметь полностью сконфигурированный Mojo?

Я попытался дольше подход с

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

вместо lookupMojo, но это не меняет немного.

ответ

5

Вам понадобится часть <configuration/> и определите значения, которые вас интересуют. Вы ожидаете, что это будет немного умнее, но на самом деле то, что делает испытательный жгут, оно считывает значения из <configuration/> и игнорирует те из ваших аннотаций. Испытательный жгут оставляет желать лучшего, он фактически не загружает значения для вас, как правильное исполнение/интерполяция Maven ... Поэтому я бы посоветовал использовать maven-invoker-plugin, если он лучше подходит вашим потребностям.

+2

Похоже, что 'maven-plugin-testing-harness' имеет долгий путь. – EvgeniySharapov

+0

О, похоже, так оно и есть, но позвольте мне заверить вас, что это было так, так как Maven 2.x вышел, поэтому ... Это может занять некоторое время раньше (если когда-либо), это будет рассмотрено. – carlspring

+1

есть связанный ответ в http://stackoverflow.com/questions/31528763/how-to-populate-parameter-defaultvalue-in-maven-abstractmojotestcase/36064396 - ответ предлагает использовать mojoRule.lookupConfiguredMojo(), который, кажется, установлен значения по умолчанию. – wemu

Смежные вопросы