2013-06-14 28 views
9

Test senaryoları ile basit bir android projem var.Android Gradle Kod Kapsamı

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

Ben varsayılan androidin yeni inşa sistemi varsayılan olarak temel test sonuçlarını sağladığını görüyoruz. (Hooray!)

Şimdi kod kapsamını da görmek istiyorum. Bunu Emma ve Ant senaryolarını kullanarak nasıl ayarlayacağımı biliyorum, ancak burada Ant senaryolarını çalıştırmak istemiyorum. Yeni yapı sistemini kullanarak benim amacımı yeneceğimi hissediyorum.

Ben Github bulundu birkaç Cobertura eklentileri denedim. Özellikle Bir: Ben ProjName yapı dosyası eklentiyi kullanmaya çalışırsanız https://github.com/stevesaliman/gradle-cobertura-plugin

Ancak o zaman java eklentisi hakkında hataları olsun. java eklentisini ekleyen tools.android.com'da bu davranışı oluşturacağım. Uygulamıyorum, bu yüzden cobertura eklentisi olmalı. Ben ana yapı dosyasında eklentiyi kullanmaya çalışırsanız
sonra java hatalarını görmüyorum ama şimdi bakın:

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

ne yapmalıyım ??

+0

Herkes bir android projede clover gradle eklentisini kullanmayı denedi mi? [Android Studio'yu kullanarak kod kapsama almak nasıl?] Arasında – SoH

+0

olası yinelenen (http://stackoverflow.com/questions/18683022/how-to-get-code-coverage-using-android-studio) – 030

+2

bağlantılı soru sorulmuştur Benimkiden yaklaşık üç ay sonra ... Yani gerçekte bu benim potansiyelimdir. – Sababado

cevap

7

JaCoCo destek Android gradle eklenti v0.10 (http://tools.android.com/tech-docs/new-build-system) ilave edildi.

Enable in the tested Build Type with testCoverageEnabled = true 

android { 
    jacoco { 
    version = '0.6.2.201302030002' 
    } 
} 

Ben http://chrisjenx.com/gradle-robolectric-jacoco-dagger/ izleyerek Robolectric ile çalışan JaCoCo kapsama almak başardı.

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

geliştirilmiş komut dosyasına bakın https://gist.github.com/ultraon/54cca81ca159ed0a4a9ebf62e89c26ba – ultraon

6

Emma desteği Yeni Android inşa sistemi içinde yakında serbest planlanmaktadır: şimdi gradle aracılığıyla android ile Emma'yı çalıştırmak için hiçbir resmi yolu yoktur için http://tools.android.com/tech-docs/new-build-system/roadmap

kadar. Sanırım enstrümantasyon oldukça kolay bir şekilde başarılabiliyor, ancak Android'e kapsama ile testler yapmasını söylemenin bir yolunu özleyeceksin. Üstelik, şu anda aygıtımdan emma çalışma zamanı kapsama verilerini aşağı çekmenin hiçbir yolu yoktur (bilgimin en iyisine).

Bu proje ilgini çeker: https://github.com/stephanenicolas/Quality-Tools-for-Android. Emma, ​​Android Gradle eklentisine girer girmez güncellenmiş olacak.

---- GÜNCELLEME

Bu eklenti Android, Android eklenti ile uyumsuz Java eklentisi kullanan sahiptir çalışmak için şansı bulunmuyor.

+0

(http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-Emmaplugin) [Gradle için Emma eklentisi] böylece Java eklentisi bağlıdır (ve olsa [Android eklenti ile çalışmaz] (http: //code.google.com/p/android/issues/detail?id=56232)), [Gradle için JaCoCo eklentisi] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-GradleJacocoPlugin) Java eklentisine bağlı gibi görünmüyor ve * çalışmalı. – sschuberth

+0

Yukarıda bahsedilen QAT projesinde Jacoco ile aletli Gradle derlemesinin bir örneğini bulabilirsiniz. Yine de en son denedim, bir gerileme Jacoc'ın son versiyonunun çalışmasını engelledi ancak bu düzeltilmiş olabilirdi. – Snicolas