2016-12-09 52 views
1

我父POM包含maven-surefire-pluginmaven-failsafe-plugin配置如下用我的接口com.adam.testutil.IntegrationTest爲JUnit 4中@Category註釋定義<groups><excludedGroups>參數,可以以將任何測試標記爲集成測試。是否有第三方庫的接口來使用JUnit的@Category()

父pom下的所有模塊(不僅僅是那些帶集成測試的)在他們的類路徑上需要com.adam.testutil.IntegrationTest,這樣才能運行surefire和failafe插件,否則會拋出一個ClassNotFoundException

所以這個類必須在一個模塊中,所有的模塊必須聲明爲一個依賴。我寧願將它聲明爲父pom 中的依賴項,因此所有模塊都會自動繼承它,但這會創建一個循環依賴性問題,從而停止mvn的運行。

事實上,即使模塊中沒有單元或集成測試,模塊仍然需要聲明依賴關係。

我還必須使該模塊包含構建順序中的第一個模塊com.adam.testutil.IntegrationTest,否則在第一次安裝任何新系統時將無法使用該模塊。我遇到了雞與雞蛋的困境 - 我不能僅僅在空白的存儲庫中運行mvn install,因爲與IntegrationTest的依賴關係不在本地存儲庫中。

其實我並不特別想創建一個新的模塊只是爲了提供IntegrationTest。如果JUnit在庫中包含合適的org.junit.IntegrationTest類,那將會非常簡單。

雖然我認爲@Cateogry是一個很好的方式來註釋測試,以標記它們作爲集成測試,但在多模塊項目中它具有所有這些缺點。

是否有一個相關或適當命名的界面,在那裏我可以使用而不必擁有自己的界面?

在最糟糕的情況下,就JUnit,@Category,maven-surefire-plugin和maven-failsafe-plugin而言,我可以使用JDK中的接口,例如, java.lang.Cloneable - 儘管任何閱讀代碼的人都會想知道現在發生了什麼。

我曾希望JUnit會有東西,但我找不到任何有用的東西。

我可以把一個依賴關係放在我父母的第三方庫中,一切都會好起來的。

我會接受任何人從第三方庫提供合適接口的答案,其中接口的名稱不會引起任何人第一次閱讀代碼的即時問題。

import org.junit.experimental.categories.Category 
import com.adam.testutil.IntegrationTest 

@Category(IntegrationTest.class) 
public DbAndJpaIntegrationTests { 
    ... 
} 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <excludedGroups>com.bp.gis.util.HeavyTest 
     </excludedGroups> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <includes> 
      <include>**/*.java</include> 
     </includes> 
     <groups>com.bp.gis.util.HeavyTest</groups> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>integration-test</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

*然後,問題是,在項目中的每個模塊都必須有一個依賴於com.adam拉。 testutil.IntegrationTest *這裏需要什麼依賴項? – nullpointer

+0

您是否還可以提供詳細信息,以瞭解IntegrationTest當前所在的位置,以及您目前使用的模塊結構是什麼? – nullpointer

+0

我改寫了這個問題來回答你的問題。 – Adam

回答

0

如果..most你的模塊的要求..的接口,可以單獨的模塊中聲明你的IntegrationTest(雖然我建議不只是一個單一的界面,但嘗試,並把與該接口的東西以及該模塊)。讓我們通過名稱integration-test來調用它以獲得工件。

我寧願將其聲明爲在父POM的依賴關係,因此所有 模塊自動繼承它,但是這將創建一個停止運行MVN圓形 依賴問題。

  • 這不是聲明父pom.xml的依賴雖然這樣使用<dependencyManagement>可以標記一個更好的使用維護integration-test工件版本必須的。 Read more about it in the doc

事實上即使有一個模塊中的任何單位和集成測試, 模塊仍然具有聲明依賴。

  • 如果這是你只需要不會宣佈在pom.xml此模塊的integration-test神器依賴的情況。

我也有使含 模塊com.adam.testutil.IntegrationTest在構建順序的第一個模塊, 否則將無法在第一時間提供安裝任何新的 系統

  • 堆排序需要一個項目,其中相關的模塊是建立它們依賴於模塊的成功構建後的構建模塊的順序照顧。 You get to know more about it here. 因此,您的integration-test將在同一個項目中的任何模塊之前建立。

其實我並不特別希望創建一個新的模塊只是爲了 提供IntegrationTest。如果JUnit的 在庫中包含一個合適的org.junit.IntegrationTest類,那將會非常簡單。

那麼在那裏有一個方便的接口嗎?我可以在我父母的pom中放一個 依賴關係,所有都會沒事的。

  • 除非你揭露和證明什麼IntegrationTest接口是有用的,我懷疑它可以被包含在junit庫。對於一個方便的界面來說,這也是一樣的,你的界面IntegrationTest正在嘗試做什麼,它的價值將是最終的問題。
  • 此後,如果可以將其納入(接受)到任何測試範圍庫中,那麼將該庫的依賴項導入您的父項pom.xml可能會非常方便。
  • 直到那時我仍然會建議你可以使用integration-test個別模塊的方法。
+0

當maven-surefire-plugin和maven-failsafe-plugin在父pom中使用引用進行配置時,您必須在所有模塊的類路徑中都有接口。感謝參考反應堆分類。 – Adam

1

你的問題似乎表明IntegrationTest接口的目的只是爲了標記哪些測試是由surefire執行的,哪些是由故障安全執行的。

在這種情況下,您可以使用命名約定。 故障安全默認值是 described in the docs

<includes> 
    <include>**/IT*.java</include> 
    <include>**/*IT.java</include> 
    <include>**/*ITCase.java</include> 
</includes> 

爲了萬無一失,the defaults are

<includes> 
    <include>**/Test*.java</include> 
    <include>**/*Test.java</include> 
    <include>**/*TestCase.java</include> 
</includes> 
+0

這是實現差異化的一種基本方式,但實際上,爲了能夠使用適當的註釋標記測試類,這非常有效,就像在類中的JUnit測試方法用「@ Test」註釋標記一樣。之所以更有效 - 是因爲當你不得不開展一個項目時,域名實際上是與測試有關的,而「測試」這個詞通過類別名稱進行傳播,如果你不得不擔心你的名字如何命名測試也是如此,這不僅僅是註解它,而是更多的精神能量。 – Adam

相關問題