2012-09-28 63 views
2

我有一個非常標準的構建Java項目的Gradle構建。爲什麼我的Gradle測試反覆運行?

當我第一次運行它時,它會編譯所有東西並運行測試。當我第二次運行它而不更改任何文件時,它會再次運行測試。

根據this thread,如果沒有任何變化,Gradle應該被defaut懶惰並且不會打擾運行測試。這裏的默認行爲是否已更改?

編輯:

如果我運行gradle test反覆,測試只運行一次,並隨後被跳過。但是,如果我反覆運行gradle build,則每次都會重新運行測試,即使所有其他任務都標記爲最新。

回答

2

OK,所以我得到的答案感謝劉若英促使我去看看「i」可輸出...

我其實有2項測試任務:「測試'來自Java插件,還有我自己的'integrationTest'。我沒有在這個問題中提到這個,因爲我不認爲這是相關的。

事實證明,這些任務正在將他們的輸出(報告等)寫入同一個目錄,所以Gradle的基於任務的輸入和輸出跟蹤正在考慮發生了某些變化,並重新運行測試。所以下一個問題(我會另外問)變成:我怎麼幹淨地(並且最小的Groovy/Gradle代碼)完全分開兩個測試任務實例。

2

gradle uptodate檢查登錄信息級別爲什麼任務不被認爲是最新的。請重新運行「gradle build -i」以檢查日誌記錄輸出並使用info logging進行運行。

歡呼聲, 勒

0

您需要在build.gradle中創建測試任務,然後調用這些特定任務來運行特定的一組測試。這裏是將篩選出班,使他們沒有得到運行兩次(運行套件的時候,例如,然後重新運行獨立於它的子類)的一個例子:

tasks.withType(Test) { 
    jvmArgs '-Xms128m', '-Xmx1024m', '-XX:MaxPermSize=128m' 
    maxParallelForks = 4 // this runs tests parallel if more than one class 
    testLogging { 
     exceptionFormat "full" 
     events "started", "passed", "skipped", "failed", "standardOut", "standardError" 
     displayGranularity = 0 
    } 
} 
task runAllTests(type: Test) { 
    include '**/AllTests.class' 
    testReportDir = file("${reporting.baseDir}/AllTests") 
    testResultsDir = file("${buildDir}/test-results/AllTests") 
} 
task runSkipSuite(type: Test) { 
    include '**/Test*.class' 
    testReportDir = file("${reporting.baseDir}/Tests") 
    testResultsDir = file("${buildDir}/test-results/Tests") 
} 

此外,關於您的構建問題。 「構建」任務包括一個乾淨的步驟,即從構建目錄清除測試。否則,執行認爲測試已經運行。

相關問題