2017-11-03 5 views
0

Auf meinem Android-Projekt enthält jacoco keine Robolectic-Tests. Ich kann die Android Espresso und Junit Testabdeckung mit Jacoco ohne Probleme bekommen.Jacoco enthält keine Robolectic-Testabdeckung

Ich habe andere Fragen zu diesem Thema und alle Antworten zu aktualisieren ist Jacoco-Version. Ich verwende die neueste Version 0.7.9 jacoco

Das ist mein Projekt Haupt build.gradle

buildscript { 

    dependencies { 
    classpath 'org.jacoco:org.jacoco.core:0.7.9' 

    classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6-rc1' 
    // NOTE: Do not place your application dependencies here; they belong 
    // in the individual module build.gradle files 
    } 
} 

App Modul Build gradle ist.

apply plugin: 'jacoco' 

android { 
    testOptions { 
     unitTests.all { 
     jacoco { 
      includeNoLocationClasses = true 
     } 
     includeAndroidResources = true 
     } 
    } 
    } 

Antwort

0

Ich löse dieses Problem mit dem Erstellen einer separaten Aufgabe für Jacoco in Gradle.

Zunächst einmal müssen Sie jacoco Plugin hinzufügen.

Ich habe keine Abhängigkeiten hinzugefügt, wie Sie auf das Code-Snippet oben tun. Einfach Plugin hinzufügen.

Fügen Sie dann testCoverageEnabled true param zum Abschnitt buildTypes hinzu.

In diesem Beispiel ist es nur für Debuggen, aber ich glaube, wenn Sie es für die Veröffentlichung hinzufügen, sollte es auch funktionieren.

Zuletzt fügen Sie jacoco Aufgabe wie unten hinzu;

task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") { 

    group = "Reporting" 
    description = "Generate Jacoco coverage reports after running tests." 
    reports { 
     xml.enabled = true 
     html.enabled = true 
    } 
    classDirectories = fileTree(
      dir: './build/intermediates/classes/debug', 
      excludes: ['**/R*.class', 
         '**/*$InjectAdapter.class', 
         '**/*$ModuleAdapter.class', 
         '**/*$ViewInjector*.class' 
      ]) 
    sourceDirectories = files(coverageSourceDirs) 
    executionData = files("$buildDir/jacoco/testDebug.exec") 
    doFirst { 
     new File("$buildDir/intermediates/classes/").eachFileRecurse { file -> 
      if (file.name.contains('$$')) { 
       file.renameTo(file.path.replace('$$', '$')) 
      } 
     } 
    } 
} 

Mit dieser Aufgabe sollten Sie in der Lage sein, Abdeckungsberichte zu erstellen. Es wird HTML-formatierte Berichterstattung im Build-Ordner exportieren. Weitere Informationen finden Sie unter this tutorial.

+0

Bitte verstehen Sie die Frage. Die Frage ist hier auf dem Jacoco-Bericht, die Roboclect-Testberichte fehlen. – Libin

+0

Ich verstehe die Frage. Sie möchten einen Bericht für Tests erstellen, in denen robolectirc verwendet wird. Ich kann jacoco Reports einschließlich robolectric Tests mit build.gradle erhalten, wie ich oben beschrieben habe. –

+0

Ok. es funktionierte . Vielen Dank. – Libin