我有一个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
答案 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
编写的测试