2013-06-14 26 views
9

Mam prosty projekt Android z przypadkami testowymi.Kodowanie systemu Android Gradle

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

Widzę, że domyślnie nowy system budowania Androida zapewnia podstawowe wyniki testu domyślnie. (Brawo!)

Teraz chcę zobaczyć również zasięg kodu. Wiem, jak to ustawić za pomocą skryptów Emma i Ant, jednak nie chcę tutaj uruchamiać skryptów Ant. Czuję, że pokonałbym cel, w którym wykorzystałem nowy system budowania.

Próbowałem już kilku wtyczek Cobertury znalezionych na Githubie. Jeden w szczególności: https://github.com/stevesaliman/gradle-cobertura-plugin

Jednakże jeśli próbuję użyć wtyczki w pliku ProjName build następnie pojawiają się błędy o wtyczce java. Czytam na tools.android.com, że dodanie tej wtyczki wygeneruje wtyczkę java. Nie stosuję tego, więc musi być wtyczka cobertura.
Jeśli próbuję użyć wtyczki w głównym pliku kompilacji wtedy nie widzę błędy java ale teraz widzę:

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

Co mam zrobić ?? Planowane

+0

Czy ktoś próbował używać wtyczki koniczyny gradowej w projekcie android? – SoH

+0

możliwy duplikat [Jak uzyskać pokrycie kodu za pomocą Android Studio?] (Http://stackoverflow.com/questions/18683022/how-to-get-code-coverage-using-android-studio) – 030

+2

Zapytano o powiązane pytanie około trzech miesięcy po moim ... Więc w rzeczywistości jest to potencjalny duplikat mojego. – Sababado

Odpowiedz

7

Obsługa JaCoCo została dodana do wtyczki gradle systemu Android v0.10 (http://tools.android.com/tech-docs/new-build-system).

Enable in the tested Build Type with testCoverageEnabled = true 

android { 
    jacoco { 
    version = '0.6.2.201302030002' 
    } 
} 

udało mi się uzyskać pokrycie JaCoCo pracy z Robolectric wykonując http://chrisjenx.com/gradle-robolectric-jacoco-dagger/.

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

zobacz ulepszony skrypt https://gist.github.com/ultraon/54cca81ca159ed0a4a9ebf62e89c26ba – ultraon

6

wsparcie Emma ma zostać wydany wkrótce w nowym systemie Android kompilacji: http://tools.android.com/tech-docs/new-build-system/roadmap

Do tej pory nie istnieje żaden oficjalny sposób uruchomić Emmę z Androidem przez Gradle. Sądzę, że oprzyrządowanie można osiągnąć dość łatwo, ale wtedy stracisz sposób, aby powiedzieć Androidowi, aby uruchamiał testy z włączonym zasięgiem. Co więcej, obecnie nie ma możliwości (według mojej najlepszej wiedzy), aby wyciągnąć dane zasięgu działania emma z urządzenia.

Ten projekt może Cię zainteresować: https://github.com/stephanenicolas/Quality-Tools-for-Android. Zostanie on zaktualizowany, gdy tylko emma przejdzie do wtyczki Android Gradle.

---- UPDATE

Wtyczka ta ma szansę pracować z Android ma używa wtyczki Java, która jest niezgodna z pluginu Android.

+0

Podczas gdy [wtyczka Emma dla Gradle] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-Emmaplugin) zależy od wtyczki Java (a zatem [nie działa z wtyczką systemu Android] (http: //code.google.com/p/android/issues/detail?id=56232)), [plugin JaCoCo dla Gradle] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-GradleJacocoPlugin) nie wydaje się zależeć od wtyczki Java i * powinien * działać. – sschuberth

+0

Można znaleźć przykład konstrukcji Gradle oprzyrządowanej za pomocą Jacoco w projekcie QAT wspomnianym powyżej. Ostatnim razem, gdy próbowałem, regresja uniemożliwiła działanie najnowszej wersji Jacoc, ale to mogło zostać naprawione. – Snicolas