2016-01-04 4 views
5

मैं एक Maven प्लगइन और एक साधारण मोजो कि कुछ हद तकMaven प्लगइन मोजो कॉन्फ़िगर डिफ़ॉल्ट पैरामीटर मान

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

} 

कुछ परीक्षण में पोम फ़ाइल में ब्याज का हिस्सा परीक्षण

तरह
 <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> 

में विफल रहता है, क्योंकि सभी मोजो मापदंडों अगर मैं अशक्त हैं लग रहा है <configuration> पर ध्यान दें, अगर मैं इसे अस्वीकार करता हूं तो केवल scriptsPath सेट है। अन्य पैरामीटर null हैं।

क्या मुझे पूरी तरह कॉन्फ़िगर किए गए मोजो के लिए अपने परीक्षणों में कुछ और करना है?

मैं

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/> से मूल्यों को पढ़ता है और आपकी टिप्पणियों से लोगों को अनदेखा करता है। परीक्षण दोहन वांछित होने के लिए बहुत कुछ छोड़ देता है, यह वास्तव में उचित मेवेन निष्पादन/इंटरपोलेशन की तरह आपके लिए मूल्यों को लोड नहीं करता है ... इसलिए, यदि 0 आपकी आवश्यकताओं के अनुरूप बेहतर है, तो मैं maven-invoker-plugin का उपयोग करने की सलाह दूंगा।

+2

ऐसा लगता है कि 'maven-plugin-test-harness' को जाने का लंबा सफर तय है। – EvgeniySharapov

+0

ओह, ऐसा लगता है कि यह करता है, लेकिन मैं आपको आश्वस्त करता हूं कि यह इस तरह से रहा है क्योंकि मैवेन 2.x बाहर आया, इसलिए ... वास्तव में कुछ समय पहले (अगर कभी) इसे संबोधित किया जा सकता है। – carlspring

+1

http://stackoverflow.com/questions/31528763/how-to-populate-parameter-defaultvalue-in-maven-abstractmojotestcase/36064396 में एक संबंधित उत्तर है - उत्तर mojoRule.lookupConfiguredMojo() का उपयोग करने का सुझाव देता है जो सेट लगता है पैरामीटर पर डिफ़ॉल्ट। – wemu

संबंधित मुद्दे