2013-03-19 49 views
3

基於對文檔和郵件線程我已經看到3種方式注入Maven項目到我的魔力:單元測試Maven的魔咒 - 組件和參數爲null

/** 
    * Project instance 
    * 
    * @parameter default-value="${project}" 
    * @required 
    * @readonly 
    */ 
private MavenProject project; 


@Component 
private MavenProject project; 


@Parameter( expression = "${project}")  
private MavenProject project; 

但不管其中哪一個,我選擇,當我根據我在maven文檔中找到的示例運行單元測試時,項目始終爲空。

public void testMojoGoal() throws Exception { 
    File testPom = new File(getBasedir(), 
      "src/test/resources/unit/basic-test/sample-sh-project-config.xml"); 

    ShunitResourcesMojo mojo = (ShunitResourcesMojo) lookupMojo("prepare",testPom); 

    assertNotNull(mojo); 

    mojo.execute();  
} 

魔力執行包含(上卻失敗)

Validate.notNull(project); 
+0

我懷疑這只是測試工具的行爲,並且其中任何一個都可以用於真正的執行。如果是這種情況,我應該如何最好地在我的測試設置中嘲笑項目。 – Eddie 2013-03-19 23:33:23

+0

[使用Maven插件測試工具測試默認值和Mojos表達式的可能重複:](http://stackoverflow.com/questions/9496534/test-default-values-and-expressions-of-mojos-using-maven-插件測試線束) – amaidment 2013-12-16 15:27:25

回答

4

,我只是工作在我自己的插件並跑進了同樣的問題。我無法找到它的文檔,但我看了一下maven-ant插件(https://svn.apache.org/repos/asf/maven/plugins/trunk/maven-ant-plugin),看看他們是如何做到的。

我認爲這是內置的測試用具行爲,但是您必須在測試pom.xml中添加一個「project」參數,以將該值設置爲MavenProjectStub的子類,例如在「ant-test」測試:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ant-plugin</artifactId> 
    <configuration> 
     <project implementation="org.apache.maven.plugin.ant.stubs.AntTestMavenProjectStub"/> 
     <settings implementation="org.apache.maven.plugin.ant.stubs.SettingsStub"/> 
     <localRepository>${localRepository}</localRepository> 
    </configuration> 
    </plugin> 

我希望你已經得到了你的答案,只是發佈給那些關注。

+0

好的發現,謝謝傑夫! – Eddie 2014-01-20 13:03:55

+0

它幫助:我得到一個項目實例,但它的所有值設置爲null ... – 2015-09-09 15:09:53