Я разрабатываю собственный плагин Maven. Для тестирования я использую тесты JUnit с MojoRule
. Само тестирование работает нормально (я могу прочитать конфигурацию плагина, определенную в тестовом ПОМ). Однако я хочу проверить доступ к артефактам проекта.
До сих пор я не понял, как сказать моему тестовому классу:
- , чтобы рассматривать отдельный каталог как исходная папка для моего тестового проекта
- , чтобы выполнить
package
перед моим плагином - , чтобы получить
MavenProject
как поле в моем классе (во время выполнения оно пустое)
Мой класс Mojo выглядит так:
/**
* Identifies potential actions from the project's source code.
*
* @goal identify
*/
public class IdentifyMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}")
private MavenProject project;
@Override
public void execute() {
getLog().info("Project: " + project);
for (Artifact nextArtifact : project.getArtifacts()) {
getLog().info("Next artifact: " + nextArtifact);
}
}
}
Тестовый класс выглядит так:
public class IdentifyMojoTest {
private static final String TEST_POM_FILE_PATH = "src/test/resources";
private static final String TEST_POM_FILE_NAME = "test-pom.xml";
private MojoRule rule = new MojoRule();
@Ignore("Requires mvn install")
@Test
public void execute_loadWithPlexus_noExceptions() throws Exception {
// Arrange
String goalName = "identify";
File testPom = getTestPom();
// Act
IdentifyMojo identifyMojo = (IdentifyMojo) rule.lookupMojo(goalName, testPom);
identifyMojo.execute();
// Assert
}
@Rule
public MojoRule getRule() {
return rule;
}
@NotNull
@Contract(" -> new")
private File getTestPom() {
return new File(TEST_POM_FILE_PATH, TEST_POM_FILE_NAME);
}
}
Тестовый POM выглядит так:
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<artifactId>test-project</artifactId>
<build>
<plugins>
<plugin>
<groupId>com.example.maven</groupId>
<artifactId>example-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>