У меня есть Maven плагин и простой Mojo, который выглядит несколько близко кMaven Plugin Mojo Настройка по умолчанию значения параметров
public abstract class AbstractSetupMojo extends AbstractMojo {
@Parameter(property="targetHost", defaultValue="localhost")
private String targetHost;
@Parameter(property="targetPort", defaultValue="27017")
private Integer targetPort;
@Parameter(property="targetDbName", required=true)
private String targetDbName;
@Parameter(property="sourceHost", defaultValue="${mojo.configuration.targetHost}")
private String sourceHost;
@Parameter(property="sourcePort", defaultValue="${mojo.configuration.targetPort}")
private Integer sourcePort;
@Parameter (property="sourceDbName", defaultValue="${mojo.configuration.targetDbName}")
private String sourceDbName;
@Parameter(property="scriptsPath")
private File scriptsPath;
}
Другая Mojos расширяет эту. Итак, идея состоит в том, чтобы установить параметры source*
на значения соответствующих параметров target*
. Также устанавливаются некоторые значения по умолчанию.
В тесте у меня есть что-то вроде
public class GenerateMojoTest extends AbstractMojoTestCase {
protected void setUp() throws Exception {
super.setUp();
}
public void testConfiguration() throws Exception {
File pom = getTestFile("src/test/resources/test-project-1/pom.xml");
assertNotNull(pom);
assertTrue(pom.exists());
GenerateMojo generateMojo = (GenerateMojo)lookupMojo("generate", pom);
assertThat(generateMojo.getSourceDbName()).isEqualTo(generateMojo.getTargetDbName());
assertThat(generateMojo.getSourcePort()).isEqualTo(generateMojo.getTargetPort()).isEqualTo(27017);
assertThat(generateMojo.getSourceHost()).isEqualTo(generateMojo.getTargetHost()).isEqualTo("localhost");
}
}
Часть интереса в файле POM в тесте выглядит
<plugin>
<groupId>com.ffy</groupId>
<artifactId>setup-maven-plugin</artifactId>
<!--
<configuration>
<scriptsPath>src/test/resources/temp</scriptsPath>
</configuration>
-->
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
Тест терпит неудачу, потому что все параметры Mojo равны нулю, если я keep <configuration>
закомментировал, если я раскомментирую его, то установлен только scriptsPath
. Другие параметры: null
.
Должен ли я сделать что-то еще в своих тестах, чтобы иметь полностью сконфигурированный Mojo?
Я попытался дольше подход с
protected GenerateMojo setupMojo(final File pom) throws ComponentConfigurationException, Exception {
final MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
final ProjectBuildingRequest buildingRequest = executionRequest.getProjectBuildingRequest();
final ProjectBuilder projectBuilder = this.lookup(ProjectBuilder.class);
final MavenProject project = projectBuilder.build(pom, buildingRequest).getProject();
final MavenSession session = newMavenSession(project);
final MojoExecution execution = newMojoExecution("generate");
final GenerateMojo mojo = (GenerateMojo) this.lookupConfiguredMojo(session, execution);
return mojo;
}
вместо lookupMojo
, но это не меняет немного.
Похоже, что 'maven-plugin-testing-harness' имеет долгий путь. – EvgeniySharapov
О, похоже, так оно и есть, но позвольте мне заверить вас, что это было так, так как Maven 2.x вышел, поэтому ... Это может занять некоторое время раньше (если когда-либо), это будет рассмотрено. – carlspring
есть связанный ответ в http://stackoverflow.com/questions/31528763/how-to-populate-parameter-defaultvalue-in-maven-abstractmojotestcase/36064396 - ответ предлагает использовать mojoRule.lookupConfiguredMojo(), который, кажется, установлен значения по умолчанию. – wemu