2012-02-29 65 views
4

使用Maven插件測試線束(2.0-alpha1)時出現問題:當我想測試我的Mojo時,參數的默認值和表達式不適用。 我有以下參數:使用Maven插件測試線束測試默認值和Mojos表達式:

/** 
* <p>The output file to write the settings to.</p> 
* 
* @parameter default-value="${project.build.directory}/myProperties.properties" expression="${properties.file}" 
*/ 

private String file; 

當我運行我的單元測試此屬性始終爲空。我試圖注入一個MavenProjectStub,它成功返回${project.build.directory},但這不適用於我的Mojo參數。

在測試過程中,有什麼方法可以在我的Mojos中啓用默認值和表達式,如${project.build.directory}

回答

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> 

而這正是你可以抓住從代碼庫:https://github.com/grighetto/maven-plugin-testing-harness

+0

Gianluca,爲了支持MavenProjectStub中的表達式,我非常想知道更改了什麼,因爲我遇到了同樣的情況。我寧願理解我使用的修改過的代碼,然後才能抓住整個項目並開始依賴它...請詳細說明需要進行哪些更改?我掃描了一些課程,但無法分辨您的更改是在哪裏進行的。 – 2012-08-06 15:27:00

+0

@Meghan,你可以看看GitHub上這個特定的提交:https:// github。com/grighetto/maven-plugin-testing-harness/commit/c711fb0c8e9b03fe886a5db5b888478f1b4dc70a 您可能已經想通了,但相關更改已應用於AbstractMojoTestCase類(檢查從295到311的行)。在這個修復之前,問題是插件沒有從Mojo中提取參數,然後應該將其傳遞給PluginParameterExpressionEvaluator。我希望這能夠澄清一點。 – 2012-09-06 01:50:20

7

所以看起來they added lookupConfiguredMojo for just this use case。我花了一段時間才弄清楚如何調用它,因爲您需要一個正確配置的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"); 
... 
+0

這可能是一個maven版本問題(我正在使用maven 3.1.1),但是在運行此代碼時,出現'IllegalArgumentException:無效的存儲庫系統會話:會話可能不爲空。有沒有其他配置需要設置才能使其工作? – amaidment 2013-12-16 16:16:43

+0

抱歉,我從未看到過此評論,但是執行此操作的代碼位於以下位置:https://code.google.com/p/cleartk/source/browse/jcasgen-maven-plugin/src/test/java/org /cleartk/plugin/JCasGenMojoTest.java?r=183f61f1decb199fec571c2eb49de7abd4053f4a – Steve 2014-01-21 20:11:50

3

我測試我的插件時遇到了一堆問題,包括這個。每個問題只需要幾行解決,但找到它們並不容易。這裏的指針幫助!

我把它們合併在一個 BetterAbstractMojoTestCase.java類。它包含了解決我碰到的半昏迷問題的神奇線條;它在這裏給出了你的問題的一個lookupConfiguredMojo(File pom, String goal)方法。

+0

使用Steve的單元測試代碼,但用'newMavenSession()調用代碼來代替'executionRequest.getProjectBuildingRequest()'getProjectBuildingRequest()'讓我過去了路障。感謝分享。 – Adam 2017-07-10 10:40:56

+0

實際上進一步發現了幾個步驟,發現我需要'MavenProject',這個測試不是在Plexus容器中創建的,所以我必須使用Steve的代碼片段中實例化的項目手動將它設置到Mojo中。 – Adam 2017-07-10 15:16:05

0

對於3+版本:

<dependency> 
     <groupId>org.apache.maven.plugin-tools</groupId> 
     <artifactId>maven-plugin-annotations</artifactId> 
     <version>3.5</version> 
     <scope>provided</scope> 
    </dependency> 

花了,而關於這個我自己糊塗認識我是混合的Javadoc語法註釋語法之前。

@Parameter(property = "project.build.directory") 
private String projectBuildDir; 

然後將您的文件名與該值連接以完成代碼中的路徑。