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

Wil*_*iam 5 maven-plugin maven-3

我有一个Maven插件,我试图使用的子类测试AbstractMojoTestCase.该插件使用a Mojo定义outputFolder参数defaultValue.通常不期望用户在POM中提供该参数.

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

如果我在真实场景中使用插件,那么outputFolder将按预期进行默认.

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

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.
    }
}
Run Code Online (Sandbox Code Playgroud)

进一步:如果我outputFolder在POM中定义参数如下:

<outputFolder>${project.build.directory}/someOutputFolder</outputFolder>
Run Code Online (Sandbox Code Playgroud)

那么${project.build.directory}不是在AbstractMojoTestCase内解决.

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

或者这是一个错误AbstractMojoTestCase

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

Gui*_*Sim 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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