2015-02-06 12 views
5

Sto imparando oggi TeamCity Integration Server e sto cercando di abilitare Jococo Reports con la mia applicazione basata su Android Gradle.File dati Jacoco non leggibile per Android su TeamCity

This documento mostra me come attivare la copertura Jococo, con il seguente avviso:

Assicurarsi che i test eseguiti in forcella = modalità di vero. In caso contrario, i dati di copertura potrebbero non essere raccolti correttamente.

Non so cosa devo fare per "eseguire i miei test in modalità fork = true". TeamCity rapporti di copertura di generazione purtroppo non si e mi è di avviso con il seguente registro:

percorso file di dati Jacoco specificato come C: \ TeamCity \ buildAgent \ temp \ buildTmp \ JACOCO5884661263301729570coverage \ jacoco.exec ma non è leggibile. La copertura non verrà raccolta.

Penso che questo avvertimento è legato alla non esecuzione della prova in forcella = true modalità.

Quindi, la mia domanda è:

  1. Cosa forchetta = true modalità significa e
  2. come abilitarlo a Gradle?

Grazie !!!

+0

Abbiamo cambiato fuorviante 'forchetta = true' dichiarazione. Grazie per la segnalazione. –

risposta

6

Dopo alcune ricerche, sono stato in grado di istruire TeamCity per elaborare i rapporti di copertura generati da jacoco utilizzare "servizi di messaggio" tecnica, ha spiegato il this:

Dal TeamCity 9.0, TeamCity è in grado di analizzare JaCoCo i dati di copertura e generare un report utilizzando un messaggio di servizio con il seguente formato:

##teamcity[jacocoReport dataPath='<path to jacoco.exec file>']

Così, ho modificato il mio file build.gradle aggiungendo le linee folowing per jacocoTestReport sezione:

if (project.hasProperty("teamcity")) { 
    println '##teamcity[jacocoReport dataPath=\'app/build/jacoco/testDebug.exec\' includes=\'com.mynamespace.myproject.*\' excludes=\'**/R.class **/R$*.class **/*$ViewInjector*.* **/BuildConfig.* **/Manifest*.*\']' 
} 

Dopo di che, il complere jacocoTestReport era:

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") { 
    group = "Reporting" 

    description = "Generate Jacoco coverage reports" 

    classDirectories = fileTree(
      dir: '../app/build/intermediates/classes/debug', 
      excludes: ['**/R.class', 
         '**/R$*.class', 
         '**/*$ViewInjector*.*', 
         '**/BuildConfig.*', 
         '**/Manifest*.*'] 
    ) 

    additionalSourceDirs = files(coverageSourceDirs) 
    sourceDirectories = files(coverageSourceDirs) 

    executionData = files('../app/build/jacoco/testDebug.exec') 
    if (project.hasProperty("teamcity")) { 
     println '##teamcity[jacocoReport dataPath=\'app/build/jacoco/testDebug.exec\' includes=\'com.mynamespace.myproject.*\' excludes=\'**/R.class **/R$*.class **/*$ViewInjector*.* **/BuildConfig.* **/Manifest*.*\']' 
    } 

    reports { 
     xml.enabled = true 
     html.enabled = true 
    } 

} 

E la TeamCity ha iniziato a riferire CodeCoverage come belows:

enter image description here

0

Si potrebbe prendere in considerazione l'utilizzo del Gradle jacoco plugin. Questo ha l'ulteriore vantaggio di rimuovere qualsiasi dipendenza da un'infrastruttura di CI, consentendo di eseguire report di copertura delle macchine sviluppatore.

+0

In realtà, sto già usando il plugin jacoco con Gradle e sono in grado di eseguire test di copertura sulle macchine degli sviluppatori.Ma, vorrei correre al server CI per poter rifiutare una build se la quantità di "codice testato" diminuisce. – regisxp

Problemi correlati