【发布时间】:2020-01-24 11:11:45
【问题描述】:
我正在开发一个自定义 Maven 插件。对于测试,我使用带有 MojoRule 的 JUnit 测试。测试本身工作正常(我可以阅读测试 pom 中定义的插件配置)。但是,我想测试对项目工件的访问。
到目前为止,我还没有弄清楚如何告诉我的测试类:
- 将单独的目录视为我的测试项目的源文件夹
- 在我的插件之前执行
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>
【问题讨论】: