2014-01-27 48 views
0

如何爲pom.xml中包含的依賴項提取tests.jars,而不明確指定測試作用域對工件的依賴性。 例如:我的pom.xml包含'n'依賴項,其中大部分還包含tests.jar。當我使用這個pom運行mvn:test時,我想抓住這些依賴性測試並運行它們(因爲父pom是聚合器,並且想要運行測試以確保集成不會破壞事物)。 如果我在這些'n'依賴關係的測試工件中包含依賴項,並使用maven-surefire-plugin和dependenciesToScan組合(如下所示),我可以運行測試。 但是這需要我每次爲依賴關係構建測試jar或添加新的依賴關係時編輯pom.xml。maven自動拉取依賴關係測試jar

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.15</version> 
    <configuration> 
     <dependenciesToScan> 
      <dependency>group:artifact1</dependency> 
      <dependency>group:artifact2</dependency> 
     </dependenciesToScan> 
    </configuration> 
</plugin> 
.. 
.. 
<dependencies> 
    <dependency> 
     <groupId>group</groupId> 
     <artifactId>artifact1</artifactId> 
     <version>version</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>group</groupId> 
     <artifactId>artifact2</artifactId> 
     <version>version</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
.... 
... 
</dependencies> 

沒有對測試工件添加明確depenency,是可以自動拉動和運行依賴的測試以及(當然不是全部依賴但一些符合特定組的ID)?

+0

上次編輯沒有改進結果。粘貼XML,選擇它,然後使用編輯器上方的小「代碼」按鈕將其變爲代碼。 –

+0

現在希望它更好。 –

+1

我轉移到gradle上來實現這一點。這是一個使用ant JUnit的簡單任務配置。 http://stackoverflow.com/questions/21439082/gradle-to-run-tests-from-test-dependency-jars有詳細信息。 –

回答

1

這聽起來不像是一種理智的策略。測試將在每個依賴關係生成時運行。

除非您在測試之間創建了依賴關係(例如更改類路徑上JAR的順序將更改測試結果),否則從不同項目再次運行它們不應該有任何影響。

如果當類路徑上的JAR順序發生變化時,如果您的測試開始中斷或行爲不同,那麼我建議您查看您的版本控制系統並與編寫該測試的人員交談。

[編輯]回覆下面的第一個評論:

我去過那兒。你描述的是一個集成測試(IT)。首先,對他們真的很小心。信息技術是脆弱的,資源也是無底洞。如果你不小心,你會用自己的工作扼殺自己。另見:Integration Tests are scam

此聲明後,這裏是我的策略,馴獸:

  1. 確保測試是獨立的。總是。

  2. 創建一個取決於WAR模塊的新模塊。這包含您的IT - 它可以看到整個世界,可以擁有自己的設置和配置,並且可以根據需要部署WAR。

  3. 請記住,錯誤不是隨機的。 People always make the same mistakes over and over again.這對你有利一次。所以你需要做的是添加檢查Spring配置中的錯誤的測試。這些測試應該加載spring配置並執行如下檢查:我們是否看到了我們期望的bean?那裏正確的覆蓋?豆丟失了嗎?

隨着您添加測試,缺陷率將下降,因爲測試將覆蓋您的團隊通常會犯錯誤的那些區域。

+0

我的用例是:使用POM創建一個戰爭文件。這場戰爭取決於'n'java項目。所有的java項目都是基於spring項目的,這個項目定義了spring bootstrap的配置。這個根配置包括來自Java項目的spring配置。當戰爭最終建成時,我想確保沒有任何事情能夠破壞w.r.t的spring root配置。 –

+0

我明白了。我也在那裏。查看我的編輯如何解決它。 –

0

首先,如果我們談論單元測試,上述設置沒有意義。您忽略了Maven的概念,導致每個模塊都應該在模塊中進行單元測試,並且在生成的jar文件被打包之前在生命週期中運行它們。

文件夾佈局恰好是這樣的:

+-- pom.xml 
    +-- src/ 
     +-- main 
      +--- java (Production code) 
     +-- test 
      +--- java (Unit Test code) 

所以給定的測試代碼的目的是單元測試的產品代碼。這意味着單元測試將在構建和包裝該工件期間運行,並且在包裝之後運行NOT。如果是這種情況,我們正在討論應該以不同方式處理的集成測試。

您正在使用的測試罐針對不同的東西。它用於具有幾個單元測試使用的公共類,這些單元測試可以在單元測試中重用代碼。

+0

請參閱我的評論,回覆@Aaron回覆。 –

+0

@Jack但這是集成測試。在那裏你應該創建一個單獨的模塊 - 它可以使用貨物將戰爭文件部署到Tomcat等,或者可以是aquirillian來對真實環境中的戰爭進行集成測試。 – khmarbaise