2012-08-08 91 views
34

有什麼辦法可以提供某些命令行參數以跳過所有測試,但跳過某個模塊?所以我不需要在每次需要運行另一個測試時更改pom.xml?maven ::在多模塊項目中只運行單一測試

例如,我想在TeamCity上創建構建配置,並提供命令行參數以在某些模塊中只運行單個測試。下次我需要更改它並運行另一個測試,依此類推。

也許這不是CI如何使用,但仍然如此。

+0

您是否看到該主題? http://stackoverflow.com/questions/1873995/run-a-single-test-method-with-maven和這裏更多:http://maven.apache.org/plugins/maven-surefire-plugin/examples/ single-test.html除了這些我找不到。 – 2012-08-08 17:20:30

+9

@ MaunoV。實際上如果有幾個模塊,測試將會失敗。我發現的解決方案:-Dtest = TestName -DfailIfNoTests = false – jdevelop 2012-08-08 18:30:05

回答

49

我假設您已閱讀關於running a single test under surefire的文檔?他們不告訴你是如何做到這一點的子模塊:

mvn test -Dtest=testname -pl subproject 

哪裏subproject是包含測試項目。從MVN手冊頁:

-pl, - 項目精氨酸指定反應堆項目的逗號分隔的列表來構建所有項目來代替。項目可以由[groupId]:artifactId或其相對路徑指定。

+0

我希望有一種方法做到這一點,而不指定子項目,所以我不必考慮它(我可以做一個bash但它很醜) – 2015-03-19 15:42:54

+15

This如果要測試的模塊取決於其他子項目,則解決方案不起作用。 – Vadzim 2015-11-16 08:06:26

+3

@Vadzim,對我來說,它幫助使用'-DfailIfNoTests = false':'mvn test -Dtest = testname -DfailIfNoTests = false' – Abdull 2016-05-23 15:37:27

4

其他答案我看到的是沒有完全完成,爲項目這取決於要構建的其他子模塊。一種選擇是運行mvn install以將所需的罐子安裝到~/.m2/...中,但該選項不是很「乾淨」。

以下命令將構建子模塊,並僅運行指定的測試類。這將在父模塊級別運行。另外,不需要指定子模塊名稱。

mvn test -DfailIfNoTests=false -Dtest={test_class_name} -am 

順便說一句,這也可以mvn clean test -Dfa.....。運行測試時始終運行clean是我個人的習慣。

References ..
-am將使所有其他子模塊。
-DfailIfNoTests=false不會使整個過程失敗,因爲我們不打算在其他模塊中運行測試。
-pl選項不需要,因爲-am已經構建了所有東西

+0

謝謝!這個爲我工作! – 2018-02-07 07:15:11

相關問題