2010-11-02 44 views
9

我爲一個現在可以正常工作的項目創建了一些原型,但我希望能夠驗證從原型生成的代碼在將來繼續工作。我該如何測試剛剛創建的maven原型?

我想要的是一個原型構建的階段,它需要剛剛創建的原型,運行mvn archetype:generate,然後在生成的代碼上運行mvn verify以驗證生成的代碼實際上是否正常。如果需要的話,我會寫我自己的魔咒來做到這一點,但想看看解決方案是否已經存在。我看到archetype:integration-test的目標,但它不會似乎正在做我想做的。

回答

12

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目標執行)

+0

這種方法唯一的問題是,你似乎只能做一個目標而不是多個目標(例如安裝站點) – 2013-10-10 03:44:18

+1

如果包含goal.txt文件示例,這個答案會更有用,因爲現在什麼是「上方」 。 – Lucas 2016-09-15 15:20:34

0

我想這將是像hudson持續集成服務器的情況。

你會定義一個作業

  1. 清空一個目錄(shell腳本)
  2. 創建一個基於原型一個新的項目(MVN原型:產生)
  3. 運行項目(MVN包)

雖然這可能可能以某種方式融入一個Maven的生命週期,它會覺得自己是個爛攤子。改用CI。

+1

這會工作,但我認爲這是一個後備解決方案。問題是,我沒有發現我的模板代碼在提交之後才被破解,這是我寧願避免的。另外,在maven中調用maven正是maven-release-plugin所做的,所以這不是不尋常的。 – mes5k 2010-11-03 21:09:00

0

我看到了原型:集成測試的目標,但它似乎沒有做我想做的。

除非我誤解你想要什麼,在archetype:integration-test目標似乎是一個很好的解決方案:

執行原型整合 測試,從目前由創建 項目的具有定義屬性的原型 和可選 與參考副本的比較。一個IT 由目錄中 的src /測試/資源/項目 包含:

  • goal.txt(內容其實並沒有使用,但將來的版本應該把它解釋爲 兌產生 運行目標項目:看ARCHETYPE-334),
  • archetype.properties與項目生成的屬性,包含從IT創建的 預計項目的參考副本
  • 可選參考/目錄。

根據上面的描述,這個目標可以精確地運行集成測試(S)檢查與對預期的結果,目前的原型生成一個項目,這看起來像一個清潔,簡單,自包含的方式測試一個原型。

爲什麼這種做法不符合?我錯過了什麼?

+0

原型:integration-test實際上並不構建或測試生成的代碼,這正是我想要的。這就是我現在認識到功能334的意義所在。 – mes5k 2010-11-03 21:14:19

+0

@ mes5k:Ahhhhh,我想我明白了*現在*您想要做什麼,即從生成的項目運行測試。原來的問題對我來說並不明確。 – 2010-11-03 21:21:19

3

除了使用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

2

我我自己也有點掙扎,並想到了這一點當使用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說明了一個完整的工作示例。

+0

我似乎無法得到這個工作。你需要做的不僅僅是添加文件嗎?我期待這個原型在''mvn clean compile''期間運行集成測試,但它似乎完全忽略了它們。 – Lucas 2016-09-15 18:52:28

+0

@Lucas上面鏈接的完整工作示例確實有效。如果我是你,我會環顧四周,例如在GitHub上,其他例子,我相信你會想到它! – vorburger 2016-09-16 16:44:35

+0

我確實最終得到了一些工作,但是我確實需要將'''添加到原型「集成測試」目標中,我不確定這是否是maven未自動執行的另一個問題的症狀執行這些測試。你通常如何引用這些測試? Maven似乎完全忽略了我的''goals.txt''文件。我已經將我的原型遷移到archetype.xml文件上使用'archetype-metadata.xml',這似乎沒有什麼區別。 – Lucas 2016-09-16 17:19:03

相關問題