2015-12-02 51 views

回答

2

我終於找到了解決辦法,用this documentation的幫助下呈現所有在build運行的任務,testrelease等以非常簡潔的方式。因此,通過執行任務clean,preBuild取決於我的copyTask我可以確保在每次清理或構建項目時運行復制任務。

但是由於我不想在構建或清理過程中運行這個程序,但是當我只運行測試時想運行它,我確定了一個編譯釋放單元測試源的任務,名爲compileReleaseUnitTestSources,但只是在構建中提及它。作爲gradle這個

compileReleaseUnitTestSources.dependsOn(myCopyTask) 

不實際工作,因爲gradle這個會給一個錯誤,說找不到任務compileReleaseUnitTestSources作爲某些原因,任務還不可用。相反,通過在afterEvaluate塊包圍它,我們可以保證所有的任務後評估該塊被執行,這樣,我們有機會獲得現在的任務,所以最後我說這對我的build.gradle

afterEvaluate { 
    compileReleaseUnitTestSources.dependsOn(copyResDirectoryToClasses) 
} 

所有這裏的答案提到使用dependsOn關鍵字將我的任務附加到在一般構建/測試執行期間運行的另一個任務,但是他們中沒有人提到如何解決gradle無法找到任務即使您知道任務的問題確保這些任務在構建/測試執行期間可用並運行。

1

您可以讓某個任務完成另一個任務,在這種情況下,只有在另一個任務被調用後,此任務纔會運行。可以這樣做的:

task runUnitTest << { 
    println 'running tests' 
} 

task copyTestResults << { 
    println 'copying results' 
} 

//make copyTestResults finalize runUnitTest 
runUnitTest.finalizedBy copyTestResults 

您可以在官方user guide讀到它。

此外,如果你的單元測試可以跟上時代的,你不希望運行你在這種情況下,複製任務,您可以檢查測試任務狀態,並跳過副本任務,如:

task copyTestResults { 
    doFirst { 
     //chtck anothe task status and skip this one if it didn't actually work 
     if (!tasks.getByName("runUnitTest").getState().didWork) { 
      throw new StopExecutionException(); 
     } 
    } 
    doLast{ 
     println 'copying results' 
    } 
} 

或者,如果你只需要以前的單元測試運行復制任務,通過設置使其依賴於複製任務的測試任務是dependsOn財產,擁有多項OG例子讀到它here

+0

當我右鍵單擊我的單元測試方法並單擊運行單元測試時,well將會自動執行這些任務嗎? – Bhargav

+0

@Bhargav如果你將它應用到任務,它運行你的測試並運行它們,當確定 – Stanislav

+0

當我點擊運行單元測試時,我會發現哪些任務運行? – Bhargav

1

你必須設置一個「customCopyTask」,然後製作測試任務,這個測試任務就是這樣的,這個測試任務就像這個「customCopyTask」一樣依靠這個

task customCopyTask(type: Copy) { 
    from sourceSets.test.resources 
    into sourceSets.test.output.classesDir 
} 
test.dependsOn customCopyTask 
+0

我明白設置單元測試任務分開,當我運行該任務使它取決於我的副本任務我想要做的是有副本任務運行時,我執行單元測試在android工作室右鍵單擊測試和選擇正確的運行測試 – Bhargav

+0

。依賴手段必須在之前執行。例如:「運行」取決於「編譯」。 「編譯」必須在「運行」執行之前執行 – k3b

+0

是的,我知道如何確保在我運行android studio中的構建時執行此測試任務? – Bhargav

相關問題