我爲一個現在可以正常工作的項目創建了一些原型,但我希望能夠驗證從原型生成的代碼在將來繼續工作。我該如何測試剛剛創建的maven原型?
我想要的是一個原型構建的階段,它需要剛剛創建的原型,運行mvn archetype:generate
,然後在生成的代碼上運行mvn verify
以驗證生成的代碼實際上是否正常。如果需要的話,我會寫我自己的魔咒來做到這一點,但想看看解決方案是否已經存在。我看到archetype:integration-test
的目標,但它不會似乎正在做我想做的。
我爲一個現在可以正常工作的項目創建了一些原型,但我希望能夠驗證從原型生成的代碼在將來繼續工作。我該如何測試剛剛創建的maven原型?
我想要的是一個原型構建的階段,它需要剛剛創建的原型,運行mvn archetype:generate
,然後在生成的代碼上運行mvn verify
以驗證生成的代碼實際上是否正常。如果需要的話,我會寫我自己的魔咒來做到這一點,但想看看解決方案是否已經存在。我看到archetype:integration-test
的目標,但它不會似乎正在做我想做的。
UPDATE 2013:現在這是比其他答案建議要容易得多。
http://jira.codehaus.org/browse/ARCHETYPE-334於2011年
月竣工使用,只需將上述goal.txt
文件中的字install
,並從項目你archetyping測試將被援引作爲一個正常的構建的一部分。 (和/或OP的情況下verify
。)
但是,如果新來製作原型意識到this popular mini-guide是過時的和,而將用於製作原型它將不工作有工作原型集成測試運行。您應該創建一個archetype-metadata.xml
文件,如here所述。 (這是好得多一起工作爲好,因爲它使用的文件集!)
還要注意這些集成測試不以-DskipTests
迴應,但這可以如下補救:
<build>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
<configuration>
<skip>${skipTests}</skip>
</configuration>
</plugin>
</plugins>
</build>
(雖然這看起來像它跳過整個插件,它的實際工作,可能是因爲它回落到傳統模式。而我找不到任何成功的方式使用上述代碼跳過只是integration-test
目標執行)
我看到了原型:集成測試的目標,但它似乎沒有做我想做的。
除非我誤解你想要什麼,在archetype:integration-test
目標似乎是一個很好的解決方案:
執行原型整合 測試,從目前由創建 項目的具有定義屬性的原型 和可選 與參考副本的比較。一個IT 由目錄中 的src /測試/資源/項目 包含:
- goal.txt(內容其實並沒有使用,但將來的版本應該把它解釋爲 兌產生 運行目標項目:看ARCHETYPE-334),
- archetype.properties與項目生成的屬性,包含從IT創建的 預計項目的參考副本
- 可選參考/目錄。
根據上面的描述,這個目標可以精確地運行集成測試(S)檢查與對預期的結果,目前的原型生成一個項目,這看起來像一個清潔,簡單,自包含的方式測試一個原型。
爲什麼這種做法不符合?我錯過了什麼?
原型:integration-test實際上並不構建或測試生成的代碼,這正是我想要的。這就是我現在認識到功能334的意義所在。 – mes5k 2010-11-03 21:14:19
@ mes5k:Ahhhhh,我想我明白了*現在*您想要做什麼,即從生成的項目運行測試。原來的問題對我來說並不明確。 – 2010-11-03 21:21:19
要回答我的問題,「官方」的功能正在開發中:
http://maven.40175.n5.nabble.com/unit-testing-archetypes-td75257.html#a75257:
http://jira.codehaus.org/browse/ARCHETYPE-334
在此期間,該鏈接使用Maven的調用,插件提供了一種變通方法
您可能希望刪除此答案,或者指向或接受Partly Cloudy的答案,因爲此功能已實施。 – Eyal 2015-02-16 13:15:08
除了使用maven-invoker-plugin的方法之外,我們正在使用不同的方法。藉助Maven Verifier,您可以輕鬆測試Maven插件和原型。 只需添加以下依賴到你的你的Maven測試項目的POM:
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-verifier</artifactId>
<version>1.2</version>
</dependency>
現在你可以使用
org.apache.maven.it.Verifier
到正常的JUnit測試。使用驗證器,您可以運行Maven目標和關於結果的一些斷言。 對於一個完整的例子只是看看我們的JavaScript原型的集成測試,Maven的模塊: https://github.com/akquinet/javascript-archetypes
我我自己也有點掙扎,並想到了這一點當使用maven-archetype-plugin的當前版本2.3時,除了src/test/resources/projects/first/goal.txt之外,還需要一個src/test/resources/projects/first/archetype.properties文件,其中包含是這樣的:
sourceEncoding=UTF-8
groupId=integrationtest.group
artifactId=integrationtest.artifactId
version=1.0.0-SNAPSHOT
package=org.eclipse.xtend.xtend-archetype.integrationtest
packageInPathFormat=org/eclipse/xtend/xtend-archetype/integrationtest
This pull request說明了一個完整的工作示例。
我似乎無法得到這個工作。你需要做的不僅僅是添加文件嗎?我期待這個原型在''mvn clean compile''期間運行集成測試,但它似乎完全忽略了它們。 – Lucas 2016-09-15 18:52:28
@Lucas上面鏈接的完整工作示例確實有效。如果我是你,我會環顧四周,例如在GitHub上,其他例子,我相信你會想到它! – vorburger 2016-09-16 16:44:35
我確實最終得到了一些工作,但是我確實需要將'
這種方法唯一的問題是,你似乎只能做一個目標而不是多個目標(例如安裝站點) – 2013-10-10 03:44:18
如果包含goal.txt文件示例,這個答案會更有用,因爲現在什麼是「上方」 。 – Lucas 2016-09-15 15:20:34