簡體   English   中英

如何在maven surefire運行測試之前執行一次方法

[英]How to execute a method once before maven surefire runs tests

我有一個測試套件,需要預先執行一些設置代碼,以確保我們的數據庫中的某些數據是正確的。

我們正在使用maven surefire插件並行運行測試。 ${tests.wildcard}由配置文件指定。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.16</version>
    <configuration>
        <forkCount>4</forkCount>
        <reuseForks>false</reuseForks>
        <includes>
            <include>${tests.wildcard}</include>
        </includes>
    </configuration>
</plugin>

我希望能夠在surefire並行運行我的測試之前,每個整個maven執行一次只運行一次方法。 我怎樣才能做到這一點?

您可以有一個特殊的測試用例來執行您的驗證碼(如果是這樣的話,則會失敗)。

然后,該測試用例將由特定的Maven Surefire執行(不包括其他測試)執行,並附加到在test階段之前發生的Maven階段(如process-test-classes ):因此,每個Maven運行之前和之前有效地調用一次任何其他測試。

然后,正常test階段將執行任何其他所需測試,不包括特殊初始化測試。

這種配置的一個例子是:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19</version>
    <configuration>
        <excludes>
            <exclude>**/InitTest.java</exclude>
        </excludes>
    </configuration>
    <executions>
        <execution>
            <id>test-init</id>
            <phase>process-test-classes</phase>
            <goals>
                <goal>test</goal>
            </goals>
            <configuration>
                <test>InitTest</test>
            </configuration>
        </execution>
    </executions>
</plugin>

請注意,任何Surefire執行的全局配置都將排除特殊的init測試。 然后執行另一個執行(在test階段之前)並且僅運行init測試(使用<test>元素,該元素優先於任何其他包含/排除)。

因此,您將擁有以下流程:

  • 執行特殊的init測試並將數據驗證到數據庫中(如果需要,則失敗)
  • 執行任何其他測試

更新
請注意,您可以通過覆蓋默認的surefire測試執行(具有default-test執行ID)來運行特殊測試(並排除其他測試),然后為其余部分添加另一個surefire執行,從而實現相同的,並且可能以更加語義正確的方式實現。 (如上所述作為全局配置,這次作為特定執行配置)。
通過這種方法,一切都將附加到test階段,這就是為什么它在語義上更正確,盡管在pom中更加冗長。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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