[英]Maven surefire configuration for separating test into unit and integration tests fail
我有一個包含單元測試和集成測試的項目。 這些測試已經分為單元測試和集成測試,同時使用不同的類作為套件。
如何配置surefire以在“測試”階段執行單元測試,並在“集成測試”階段執行集成測試。
這是我當前的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<excludes>
<exclude>**/Test*.java</exclude>
<exclude>**/*Test.java</exclude>
<exclude>**/*Test*.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>unit-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/CoreUnitTests.java</include>
</includes>
</configuration>
</execution>
<execution>
<id>integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/CoreIntegrationTests.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
使用此配置,將不會執行任何測試,但是如果刪除“排除”,則所有測試都將在“測試”階段執行,而不僅僅是單元測試。
更新-解決方案
通過Adam Michalik的解釋,我得以解決問題。 我沒有覆蓋默認測試,而是跳過了這些測試,因為對於我的單元測試,id“ unit-test”比“ default-test”更好,這是pom的最終配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
<execution>
<id>unit-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/CoreUnitTests.java</include>
</includes>
</configuration>
</execution>
<execution>
<id>integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/CoreIntegrationTests.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
經驗法則: excludes
覆蓋includes
。 因此,以unit-test
執行為例,您的配置告訴Surefire:
**/CoreUnitTests.java
**/Test*.java
, **/Test.java
和**/*Test*.java
CoreUnitTests.java
排除列表涵蓋了CoreUnitTests.java
,因此什么也不會執行 對於integration-test
執行類似。
所以, 只運行CoreUnitTests
在test
階段, CoreIntegrationTests
在integration-test
階段,是應該足以配置includes
像你一樣,不定義任何excludes
任何地方。 但是,這還不夠好,因為正如您所觀察到的那樣,所有測試都由默認的Surefire執行(稱為default-test
運行,默認default-test
,該執行會拾取所有后綴為Test
類。 要解決此問題,您可以通過重新配置默認執行來關閉該默認執行
<execution>
<id>default-test</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
或將您的unit-test
執行重命名為default-test
(這將節省幾毫秒的構建時間,因為最后您只會調用Surefire兩次,而不會跳過默認執行而重復三次)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.