2012-06-11 50 views
4

在Maven中,是否有某種方式可以指定只有在源代碼發生更改時才運行JUnit測試?有條件地運行Maven的JUnit測試

舉例來說,我看到這條消息

[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ my_project --- 
[INFO] Nothing to compile - all classes are up to date 

現在 - 由於沒有代碼被編譯(因爲沒有從上次編譯改變),我寧願不運行測試。這可能嗎?

+0

我可以問一下,如果沒有代碼改變,爲什麼你要運行編譯目標? –

+0

這裏有兩件事。 1 - 我有一個包含多個配置文件的項目。每個配置文件都有不同的配置文件,這些配置文件將被打包到戰爭中,但是這些配置文件都沒有在測試中使用(測試有自己的'模擬'配置文件集)。出於這個原因,一旦測試通過1輪廓構建,他們將通過所有。實際上不需要爲每個構建的配置文件運行測試。 2 - 我試圖建立一個多模塊構建。每次構建都會在任何模塊中進行更改時運行 - 它正在運行所有測試(即使模塊更改爲0)。 – Vinnie

+0

啊我明白了。我想可能有人會爭辯說,如果測試不應該在配置簽入後運行,那麼配置和代碼不應該是同一個多模塊版本的一部分。我意識到這不會幫助你!也許將你的內部版本分成3個版本。代碼是由源代碼更改觸發的,並且總是運行測試。 BuildB僅用於配置。 BuildC是由A或B構建觸發的Web應用程序。BuildC僅使用A和B構建的構件,因此不會觸發編譯/測試。 –

回答

1

您的項目設置應該分解成單獨的模塊。但是,如果你不能這樣做,你可以在你想要運行測試的配置文件中設置maven.test.skip屬性。請參閱more about skipping tests on the site

你在談論一個戰爭項目。通常戰爭項目不應該有任何代碼,而只是一些配置和像html,jsp,css和java腳本以及包含jar代碼的jar包項目等東西。 jar項目將擁有代碼。如果你進行集成測試,一個好的做法是將它們放在不同的模塊中。

不同的戰爭配置可以在配置文件中,也可能在單獨的模塊中使用maven war插件的war覆蓋功能。

+0

爲什麼我想將單元測試分解爲與正在測試的代碼不同的模塊?這似乎不是一個好主意。我也看不到在代碼更改時它會如何自動運行測試,但當它沒有運行時,不會運行它們。 – Vinnie

+0

編輯答案澄清。 –