Dan*_* S. 6 unit-testing maven
我使用Maven插件测试工具(2.0-alpha1)时遇到问题:当我想测试我的Mojo时,参数的默认值和表达式不适用.我有以下参数:
/**
* <p>The output file to write the settings to.</p>
*
* @parameter default-value="${project.build.directory}/myProperties.properties" expression="${properties.file}"
*/
private String file;
Run Code Online (Sandbox Code Playgroud)
当我运行我的单元测试时,此属性始终为null.我尝试注入一个${project.build.directory}成功返回的MavenProjectStub,但这不适用于我的Mojo参数.
有没有办法${project.build.directory}在测试期间启用默认值和表达式,如我的Mojos内部?
所以看起来他们lookupConfiguredMojo只为这个用例添加了.我花了一段时间才弄清楚如何调用它,因为你需要正确配置MavenProject才能使用它.这对我有用:
File pomFile = ...
MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
ProjectBuildingRequest buildingRequest = executionRequest.getProjectBuildingRequest();
ProjectBuilder projectBuilder = this.lookup(ProjectBuilder.class);
MavenProject project = projectBuilder.build(pomFile, buildingRequest).getProject();
MyMojo mojo = (MyMojo) this.lookupConfiguredMojo(project, "my-goal");
...
Run Code Online (Sandbox Code Playgroud)
在测试我的插件时,我遇到了很多问题,包括这个问题.每个问题只需要几行修复,但找到它们并不容易.这里的指针有帮助!
我把它们组合在一个
BetterAbstractMojoTestCase.java类中.它包含了神奇的线条,解决了我遇到的半瞌睡问题; 它lookupConfiguredMojo(File pom, String goal)为您的问题提供了一种方法.
小智 2
我遇到了同样的问题,但找不到任何解决方案,所以我决定自己解决它。我已经检查了最新版本的 maven-plugin-testing-harness 的源代码(目前是 2.0-alpha-1)并将其放在我自己的 github 存储库中。
您必须从那里签出代码并在本地构建它。
您需要在项目中进行的唯一更改是替换 POM 中的依赖项。我使用自己的域/groupId 名称而不是 Apache 名称,只是为了避免与未来的 Apache 版本发生任何冲突(和混淆)。
这是您需要放入 POM 中的内容:
<dependency>
<groupId>com.menttis.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>2.0.1</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是您可以从中获取代码的存储库:https://github.com/gighetto/maven-plugin-testing-harness
| 归档时间: |
|
| 查看次数: |
2120 次 |
| 最近记录: |