2016-01-04 14 views
5

Tôi có một plugin maven và Mojo đơn giản trông hơi gầnMaven Plugin Mojo Cấu hình mặc định Parameter Values ​​

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 khác được mở rộng thế này. Vì vậy, ý tưởng là đặt các tham số source* thành các giá trị của các thông số target* tương ứng. Ngoài ra, một số giá trị mặc định được đặt.

Trong thử nghiệm tôi có cái gì đó như

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

} 

Phần quan tâm trong các tập tin POM trong các thử nghiệm trông giống như

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

Thử nghiệm thất bại bởi vì tất cả các thông số Mojo là null nếu tôi giữ <configuration> đã nhận xét, nếu tôi bỏ ghi chú thì chỉ có scriptsPath được đặt. Các thông số khác là null.

Tôi có phải làm gì khác trong các bài kiểm tra của mình để có Mojo được cấu hình đầy đủ không?

tôi đã cố gắng tiếp cận lâu hơn với

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

thay vì lookupMojo nhưng điều đó không thay đổi một chút.

Trả lời

5

Bạn sẽ cần phải có phần <configuration/> và xác định các giá trị bạn quan tâm. Bạn mong đợi nó thông minh hơn một chút, nhưng thực tế những gì khai thác thử nghiệm là, nó đọc các giá trị từ <configuration/> và bỏ qua những người từ chú thích của bạn. Các thử nghiệm khai thác lá rất nhiều để được mong muốn, nó không thực sự tải các giá trị cho bạn như một thực hiện Maven thích hợp/nội suy ... Do đó, tôi sẽ tư vấn sử dụng maven-invoker-plugin, nếu nó phù hợp hơn với nhu cầu của bạn.

+2

Có vẻ như 'maven-plugin-testing-harness' có một chặng đường dài để đi. – EvgeniySharapov

+0

Ồ, có vẻ như nó có, nhưng hãy để tôi đảm bảo với bạn rằng nó đã được như thế này kể từ khi Maven 2.x ra, vì vậy ... Nó có thể thực sự mất một thời gian trước khi (nếu bao giờ) này được giải quyết. – carlspring

+1

có câu trả lời có liên quan trong http://stackoverflow.com/questions/31528763/how-to-populate-parameter-defaultvalue-in-maven-abstractmojotestcase/36064396 - câu trả lời gợi ý sử dụng mojoRule.lookupConfiguredMojo() dường như đã đặt mặc định về tham số. – wemu

Các vấn đề liên quan