2015-05-13 3 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']) 

I «ве попытался создать пользовательский класс из базового класса, как это и передавая результаты этой строки с параметром testOutputBinFiles и вычисляя файлы динамически

class AggregateTestReport extends TestReport { 
    @Input 
    def testOutputBinFiles 

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

, но это дает мне ошибку, что возвращаемое значение не совместимо с a FileCollection

Документы для FileCollection указывают, что единственный способ получить новый - использовать функцию files(), но она не доступна из пользовательского класса для получения нового файла.

ответ

1

Вы можете объявить задачу типа TestReport со свойством «reportOn» перечисляя Test задачи агрегировать:

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

Этот подход изложен в разделе 7.3.3 «Gradle в действии» Бенджамин 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'])) 
} 
Смежные вопросы