2015-05-13 85 views
0

我正在嘗試配置一個任務,它將從二進制junit測試結果的集合中生成單個報告,但我無法創建包含所有結果的路徑的FileCollection文件位於。Gradle獲取父目錄的文件集合

我的任務是這樣定義的

task aggregateTestREports(type: org.gradle.api.tasks.tests.TestSupport) { 
    destinationDir = reportDir 
    testResultsDirs = ??? 
} 

凡???是我沒有去工作的部分。

我可以使用下面的代碼來獲得在我們構建結構的output.bin文件的列表,但我需要轉變爲目錄中的文件在列表中選擇此。

fileTree(dir: '.', includes: ['**/test-results/binary/test/output.bin']) 

我已經嘗試創建一個從基類這樣的自定義類和該行的結果傳遞給testOutputBinFiles參數和動態計算文件

class AggregateTestReport extends TestReport { 
    @Input 
    def testOutputBinFiles 

    def getTestResultDirs() { 
     def parents = [] 
     testOutputBinFiles.each { 
     File file -> parents << file.parentFile.absoluteFile 
     } 
     parents 
    } 
} 

,但是這給了我一個錯誤,返回值是不兼容一個FileCollection

FileCollection的文檔指出獲得新文件的唯一方法是使用files()函數,但它不能從自定義類中獲得以獲取新文件。

回答

1

你可以聲明TestReport類型的任務具有「reportOn」樓盤,在Test任務彙總:

task allTests(type: TestReport) { 
    destinationDir = file("${buildDir}/reports/allTests") 
    reportOn test, myCustomTestTask 
} 

這種方法是在「搖籃在行動」第7.3.3由本傑明Muschko概述(強烈推薦閱讀)。

2

由於與我的項目中的測試寫入的方式問題,由dnault的答案引入的依賴性導致我們的測試失敗。最終,當我們在導致這個問題的項目中解決問題時,他的解決方案將起作用,所以我接受了這個答案。爲了完整起見,我的臨時解決方案最終成爲

def resultPaths(FileCollection testOutputBinFiles) { 
    def parents = [] 
    testOutputBinFiles.each { 
    File file -> parents << file.parentFile.absoluteFile 
    } 
    parents 
} 

task aggregateTestReports(type: org.gradle.api.tasks.testing.TestReport) { 
    destinationDir = reportDir 
    reportOn resultPaths(fileTree(dir: '.', includes: ['**/test-results/binary/test/output.bin'])) 
}