如何填充参数" defaultValue"在Maven" AbstractMojoTestCase"?

时间:2015-07-21 01:08:47

标签: maven-3 maven-plugin

我有一个Maven插件,我试图使用AbstractMojoTestCase的子类进行测试。插件Mojo使用outputFolder定义defaultValue参数。通常不希望用户在POM中提供此参数。

@Parameter(defaultValue = "${project.build.directory}/someOutputFolder")
private File outputFolder;

如果我在真实场景中使用插件,那么outputFolder会按预期默认。

但是如果我使用Mojo测试AbstractMojoTestCase,那么当填充测试POM中定义的参数时,不会填充未在POM中定义的defaultValue的参数。

public class MyPluginTestCase extends AbstractMojoTestCase {

    public void testAssembly() throws Exception {
        final File pom = getTestFile( "src/test/resources/test-pom.xml");
        assertNotNull(pom);
        assertTrue(pom.exists());

        final MyMojo myMojo = (BaselineAssemblyMojo) lookupMojo("assemble", pom);
        assertNotNull(myMojo);
        myMojo.execute(); // Dies due to NullPointerException on outputFolder.
    }
}

此外:如果我在POM中定义outputFolder参数,那么:

<outputFolder>${project.build.directory}/someOutputFolder</outputFolder>

然后${project.build.directory}在AbstractMojoTestCase中解析 NOT

那么在测试时我需要做什么才能填充defaultvalue?

或者这是AbstractMojoTestCase中的错误吗?

这是Maven-3.2.3,maven-plugin-plugin-3.2,JDK 8

1 个答案:

答案 0 :(得分:6)

您需要使用lookupConfiguredMojo

这是我最终使用的内容:

public class MyPluginTest
{    
    @Rule
    public MojoRule mojoRule = new MojoRule();

    @Test
    public void noSource() throws Exception
    {
        MyPlugin plugin = (MyPlugin) mojoRule.lookupConfiguredMojo(loadPom("testpom1"), "myGoal");
        plugin.execute();

        assertThat(plugin.getSomeInformation()).isEmpty();
    }

    public File loadPom(String folderName)
    {
        return new File("src/test/resources/", folderName);
    }
}

当然,您需要将myGoal替换为插件的目标。您还需要弄清楚如何断言您的插件已成功执行。

有关更完整的示例,请查看我为fmt-maven-plugin

编写的测试