簡體   English   中英

用於將測試分為單元測試和集成測試的Maven surefire配置失敗

[英]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執行類似。

所以, 運行CoreUnitTeststest階段, CoreIntegrationTestsintegration-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM