2012-08-10 68 views
23

我有一個多項目構建測試在子項目和父項目。構建被彙總,以便父項目運行子項目中的所有測試。如何關閉多項目構建測試的並行執行?

我配置它,以便有在這兩個子項目和父項目的測試並行執行,通過

parallelExecution in Test := false 

不過,我也有揮之不去的感覺,是跨越多個項目的測試跑在平行下。在其中一個子項目的情況下,這是一個問題,因爲它同時在測試數據庫中改變狀態,導致測試失敗。

任何想法,如何在全球範圍內的測試並行執行的開關,項目之間?

回答

24

我想你可以申請跨應用範圍ThisBuild項目的設置,像

parallelExecution in ThisBuild := false 

我不知道你是否能結合起來,與範圍Test,但它可能沒有必要。

+0

對不起,我還挺新斯卡拉以及所面臨的同樣的問題 - 我應該在哪裏,就把這行?該項目的文件? – kirhgoff 2013-06-21 12:24:49

+0

最簡單的就是把它放到'build.sbt'中(即使你在'project/Build.scala'中有完整的配置文件也可以使用該文件) – 2013-06-21 12:38:52

+0

謝謝!我自己想到了,太急於問而不是思考:)。無論如何,謝謝 – kirhgoff 2013-06-21 17:51:10

4

看到這裏How to run subprojects tests (including setup methods) sequentially when testing

我的回答還有另一種方法,以防止並行執行。您可以進行不同項目的測試任務是互相依賴的:

test in Project2 := (test in Project2).dependsOn(test in Project1).value 
parallelExecution in Test in Project2 := false 
+2

這對我不起作用:我得到'參考未定義的設置:Project2/*:從Project2/*測試:test(/Users/the21st/Work/Project2/build.sbt:36)您的意思是Project2/web-assets-test:test?' – the21st 2015-07-21 09:34:41

13

要限制的同時執行測試在所有項目中,使用的數量:

concurrentRestrictions in Global += Tags.limit(Tags.Test, 1) 

sbt documentation

discussion

0

另一種可能性,是根據https://stackoverflow.com/a/27068019/1922026,是根項目定義一個命令別名:

.settings(addCommandAlias("test", ";s1/test;s2/test;s3/test"): _*) 

其中S1,S2和S3的子項目。當您在根項目中並運行「測試」時,測試將按照定義的順序依次執行。

相關問題