2013-06-14 23 views
9

Ich habe ein einfaches Android-Projekt mit Testfällen.Android Gradle Code Coverage

ProjNameProject 
--build.gradle 
--ProjName 
----build.gradle 

Ich sehe, dass standardmäßig das neue Build-System von Android bietet grundlegende Testergebnisse standardmäßig. (Hurra!)

Jetzt möchte ich auch Code Coverage sehen. Ich weiß, wie man das mit Emma- und Ant-Skripten einrichtet, aber ich möchte hier keine Ant-Skripte ausführen. Ich denke, das würde den Zweck von mir, das neue Build-System zu nutzen, zunichte machen.

Ich habe ein paar Cobertura-Plugins ausprobiert, die auf Github gefunden wurden. Ein insbesondere: https://github.com/stevesaliman/gradle-cobertura-plugin

Allerdings, wenn ich versuche, das Plugin in der ProjName Build-Datei zu verwenden, dann bekomme ich Fehler über das java Plugin. Ich habe auf tools.android.com gelesen, dass das Hinzufügen des java Plugins dieses Verhalten erzeugt. Ich verwende es nicht, also muss das Cobertura-Plugin sein.
Wenn ich versuche, das Plugin in der Haupt-Build-Datei zu verwenden, dann sehe ich nicht, die Fehler java aber jetzt sehe ich:

Could not find net.sourceforge.cobertura:cobertura:1.9.4.1. 
    Required by: 
     :ProjNameProject:unspecified 

Was kann ich tun ??

+0

hat jemand versucht mit Clover Gradle Plugin in einem Android-Projekt versucht? – SoH

+0

möglich duplicate of [Wie bekomme ich Code Coverage mit Android Studio?] (Http://stackoverflow.com/questions/18683022/how-to-get-code-coverage-using-android-studio) – 030

+2

Die verknüpfte Frage wurde gestellt etwa drei Monate nach meinem ... Also in Wirklichkeit ist das mein potenzielles Duplikat. – Sababado

Antwort

7

JaCoCo Unterstützung wurde dem Android Gradle Plugin v0.10 (http://tools.android.com/tech-docs/new-build-system) hinzugefügt.

Enable in the tested Build Type with testCoverageEnabled = true 

android { 
    jacoco { 
    version = '0.6.2.201302030002' 
    } 
} 

konnte ich mit Robolectric http://chrisjenx.com/gradle-robolectric-jacoco-dagger/ durch folgende Arbeits JaCoCo Abdeckung erhalten.

apply plugin: 'android' 
apply plugin: 'robolectric' 
apply plugin: 'jacoco' 

dependencies { 
    compile fileTree(dir: 'libs', include: '*.jar') 
    compile 'com.android.support:appcompat-v7:19.1.+' 

    androidTestCompile fileTree(dir: 'libs/test', include: '*.jar') 
    androidTestCompile 'junit:junit:4.11' 
    androidTestCompile 'org.robolectric:robolectric:2.3' 
    androidTestCompile 'com.squareup:fest-android:1.0.+' 
} 

robolectric { 
    // Configure the set of classes for JUnit tests 
    include '**/*Test.class' 
    exclude '**/*AbstractRobolectricTestCase.class' 

    // Configure max heap size of the test JVM 
    maxHeapSize = "2048m" 
} 

jacoco { 
    toolVersion = "0.7.1.201405082137" 
} 

//Define coverage source. 
//If you have rs/aidl etc... add them here. 
def coverageSourceDirs = [ 
    'src/main/java', 
    'src/gen' 
] 

... 

// Add JaCoCo test reporting to the test task 
// http://chrisjenx.com/gradle-robolectric-jacoco-dagger/ 
task jacocoTestReport(type: JacocoReport, dependsOn: "testDebug") { 
    group = "Reporting" 
    description = "Generate Jacoco coverage reports after running tests." 
    reports { 
     xml.enabled = true 
     html.enabled = true 
    } 

    // Class R is used, but usage will not be covered, so ignore this class from report 
    classDirectories = fileTree(
     dir: './build/intermediates/classes/debug', 
     excludes: ['**/R.class', 
        '**/R$*.class' 
    ]) 
    sourceDirectories = files(coverageSourceDirs) 
    executionData = files('build/jacoco/testDebug.exec') 
} 
+0

siehe verbessertes Skript https://gist.github.com/ultraon/54cca81ca159ed0a4a9ebf62e89c26ba – ultraon

6

Emma Unterstützung ist geplant, im Rahmen des neuen Android-Build-System in Kürze veröffentlicht werden: http://tools.android.com/tech-docs/new-build-system/roadmap

Bis jetzt gibt es keinen offiziellen Weg ist emma mit Android über gradle laufen. Ich denke, Instrumentation kann ziemlich leicht erreicht werden, aber dann werden Sie eine Möglichkeit verpassen, Android zu sagen, dass Tests mit Coverage durchgeführt werden sollen. Darüber hinaus gibt es derzeit (meines Wissens) keine Möglichkeit, Emma-Laufzeit-Coverage-Daten vom Gerät herunter zu laden.

Dieses Projekt kann Sie interessieren: https://github.com/stephanenicolas/Quality-Tools-for-Android. Sobald Emma es in das Android Gradle-Plugin schafft, wird es aktualisiert.

---- UPDATE

Dieses Plugin hat keine Chance, mit Android zu arbeiten hat es die Java-Plugin verwendet, die mit Android-Plugin nicht kompatibel ist.

+0

Während das [Emma-Plugin für Gradle] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugin-Emmaplugin) vom Java-Plugin abhängt (und somit [nicht mit dem Android-Plugin funktioniert]) (http: //code.google.com/p/android/issues/detail?id=56232)), das [JaCoCo-Plugin für Gradle] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-GradleJacocoPlugin) scheint nicht vom Java-Plugin abhängig zu sein und * sollte * funktionieren. – sschuberth

+0

Sie können ein Beispiel für Gradle Build mit Jacoco auf dem oben erwähnten Projekt QAT finden. Das letzte Mal, als ich es versuchte, verhinderte eine Regression, dass die neueste Version von Jacoc funktionierte, aber das wurde möglicherweise behoben. – Snicolas