2015-07-02 2 views
0

Я использую Jacoco в некоторых своих реализациях Gradle и решил улучшить его использование в мультипроектах.Применение Jacoco in Gradle Multiproject

Я создал структуру, подобную

parent-project 
    - model-project 
    - service-project 

В моей build.gradle родитель проекта я определила:

allprojects { 
    apply plugin: 'jacoco' 
    //apply other plugins 

    repositories {...} 

    test.finalizedBy(project.tasks.jacocoTestReport) 

    jacocoTestReport { 

    reports { 

     csv.enabled false 

     html{ 
     enabled true 
     destination "${buildDir}/reports/jacoco" 
     } 

     xml.enabled false 
    } 

    additionalSourceDirs = files(sourceSets.main.allJava.srcDirs) 
    } 

    //other configurations 

    buildscript { 

    repositories { 

     jcenter() 
     mavenCentral() 
     mavenLocal() 
    } 

    dependencies { 
     classpath 'org.ajoberstar:gradle-jacoco:0.2.0' 
    } 
    } 
} 

Когда я выполнил этот код все время я получил:

jacocoTestReport SKIPPED 

Итак, я нашел this discussion, где я понял, что

jacocoRootReport не работает, если некоторые подпроекты не имеют каких-либо испытаний на всех, потому что это приводит к тому, onlyIf из JacocoReport ложной

Я попытался вставить следующий код в конце концов, однако, еще Безразлично» т работа

task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) { 
    dependsOn = subprojects.test 
    additionalSourceDirs = files(subprojects.sourceSets.main.allSource.srcDirs) 
    sourceDirectories = files(subprojects.sourceSets.main.allSource.srcDirs) 
    classDirectories = files(subprojects.sourceSets.main.output) 
    executionData = files(subprojects.jacocoTestReport.executionData) 
    reports { 
    html.enabled = true 
    xml.enabled = true 
    csv.enabled = false 
    } 
    onlyIf = { 
    true 
    } 
    doFirst { 
    executionData = files(executionData.findAll { 
     it.exists() 
    }) 
    } 
} 

Я также пытался создать тест в сервисе-проекте ... до сих пор не работает, а сообщение о пропуске остается

Как я могу решить эту проблему?

ответ

0

Это была неправильная конфигурация. Насколько я использую TestNG вместо JUnit мне нужно было указать в моем build.gradle

Так что мой родитель конфигурация была изменение:

subprojects { 

    apply plugin: 'jacoco' 
    //apply other plugins 

    def coverageSourceDirs = [ 
    'src/main/java' 
    ] 

    repositories {...} 

    jacoco { 
    toolVersion = '0.7.5+' 
    } 

    jacocoTestReport { 

    additionalSourceDirs = files(sourceSets.main.allSource.srcDirs) 
    classDirectories = files(sourceSets.main.output) 
    sourceDirectories = files(sourceSets.main.allSource.srcDirs) 

    reports { 

     csv.enabled false 

     html{ 
     enabled true 
     destination "${buildDir}/reports/jacoco" 
     } 

     xml.enabled false 
    } 
    } 

    test { 
    useTestNG() 
    } 

    test.finalizedBy(project.tasks.jacocoTestReport) 

    dependencies { 

    testCompile "org.testng:testng:$testNGVersion" 
    testCompile "org.hamcrest:hamcrest-all:$hamcrestVersion" 
    testCompile "org.springframework:spring-test:$springVersion" 
    } 

    task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) { 

    additionalSourceDirs = files(subprojects.sourceSets.main.allSource.srcDirs) 
    classDirectories = files(subprojects.sourceSets.main.output) 
    dependsOn = subprojects.test 
    executionData = files(subprojects.jacocoTestReport.executionData) 
    sourceDirectories = files(subprojects.sourceSets.main.allSource.srcDirs) 

    reports { 

     csv.enabled false 

     html{ 
     enabled true 
     destination "${buildDir}/reports/jacoco" 
     } 

     xml.enabled false 
    } 

    onlyIf = { 
     true 
    } 

    doFirst { 
     executionData = files(executionData.findAll { 
     it.exists() 
     }) 
    } 
    } 
}