2012-04-13 81 views
23

我有我們的單元測試的默認src/test/java文件夾。一個單獨的文件夾src/integration/java可用於集成測試。如何將另一個測試源文件夾添加到Maven並將其編譯到單獨的文件夾?

我配置了maven-surefire-plugin以在各自的階段執行單元/集成測試。當編譯的類位於正確的目錄中時,這非常有效。不幸的是,Maven只支持一個測試源文件夾和一個測試輸出文件夾。

隨着內行建立輔助插件,我可以添加其他的測試源文件夾,但已編譯的類將生成到test-classes但我想的類編譯從src/integration/javatarget/integration-test-classes。這可能嗎?

src/test/java > target/test-classes 
src/integration/java > target/integration-test-classes 

PS:我不喜歡這種排除/包括封裝基板溶液(排除默認測試階段的所有**/it/**文件,並從整合階段排除所有**/unit/**

+1

將集成測試移到單獨的maven模塊中。 – 2015-07-02 18:31:02

回答

10

對不起,沒有。這樣做的方式,恕我直言,即使有一些黑客的想法。其概念是,只有一個編譯類的目標目錄和一個編譯測試類(即使<build>標籤架構暴露此)。老實說,我真的不認爲Maven應該是可能的,通過使用精心製作的模塊,Maven可以通過使用精心設計的模塊來促進應用程序的直線,乾淨和清晰的設計。

如果認爲您真正想要做的是實際創建集成測試模塊。事實上,這是常見的做法。到目前爲止,我總是有單獨的集成測試模塊,從來沒有遇到過問題。您當然應該依賴所有需要的模塊來運行這些測試。你甚至可以通過使用<type>test-jar</type>與你的依賴聲明依賴於其他模塊的測試類,這裏所說的:但是

http://maven.apache.org/guides/mini/guide-attached-tests.html

我不喜歡這種方法,並且通常喜歡與測試支持的東西單獨的模塊,就像JUnit測試用例的基類一樣。

30

根據您寫的內容,您聽起來好像沒有正確命名集成測試,也沒有使用maven-failsafe-plugin進行集成測試。根據maven-failsafe-plugin的慣例,您應該將您的集成測試命名爲*IT.java。如果你命名你的集成測試適當地處理您可以用這樣的或多或少的配置:

<project ...> 
    [...] 
    <build> 
    [...] 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.9.1</version> 
     <executions> 
      <execution> 
      <id>add-test-source</id> 
      <phase>generate-test-sources</phase> 
      <goals> 
       <goal>add-test-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
       <source>src/integration/java</source> 
       </sources> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
     [...] 
    </build> 
    [...] 
</project> 

通過上述有可能在同一個模塊內舉行的集成測試。但是這並不能解決將編譯好的集成測試類放到單獨的文件夾中的想法。

有時候最好有一個單獨的集成測試模塊,它只包含集成測試(這導致了多模塊構建)。 如果你想離開Maven的約定,你可以嘗試配置maven-compiler-plugin來使用不認爲真的有效的不同輸出路徑(例如target/integration-tests/classes)。

+1

根據此回答https://github.com/alimate/maven-source-sets – 2017-08-20 12:38:23

5

如果你只是想改變單元測試源文件夾(而不是增加額外的一個),只是改變了testSourceDirectory元素:

<build> 
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory> 

如果所有的單元測試都寫在Groovy中這是非常有用。 (但是您還需要配置maven來編譯您的groovy代碼 - 請參閱groovy-eclipse-maven-pluginbuild-helper-maven-plugin。)