2013-03-19 24 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