2013-06-14 30 views
9

मेरे पास परीक्षण मामलों के साथ एक सरल एंड्रॉइड प्रोजेक्ट है।एंड्रॉइड ग्रैडल कोड कवरेज

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

मुझे लगता है कि डिफ़ॉल्ट रूप से एंड्रॉइड की नई बिल्ड सिस्टम डिफ़ॉल्ट रूप से बुनियादी परीक्षण परिणाम प्रदान करती है। (हुरेय!)

अब मैं कोड कवरेज भी देखना चाहता हूं। मुझे पता है कि एम्मा और चींटी स्क्रिप्ट का उपयोग करके इसे कैसे सेट अप करें, हालांकि मैं यहां चींटी स्क्रिप्ट नहीं चलाऊंगा। मुझे लगता है कि नए निर्माण प्रणाली का उपयोग करके मेरे उद्देश्य को हरा देगा।

मैंने गिथब पर पाए गए कुछ कोबर्टुरा प्लगइन्स की कोशिश की है। विशेष रूप से एक: https://github.com/stevesaliman/gradle-cobertura-plugin

लेकिन अगर मैं ProjName निर्माण फाइल में प्लगइन का उपयोग करने की कोशिश तो मैं java प्लगइन के बारे में त्रुटियों को मिलता है। मैंने tools.android.com पर पढ़ा है कि java प्लगइन जोड़ने से यह व्यवहार उत्पन्न होगा। मैं इसे लागू नहीं कर रहा हूं इसलिए कोबर्टूरा प्लगइन होना चाहिए।
अगर मैं मुख्य निर्माण फाइल में प्लगइन का उपयोग करने की कोशिश तो मैं जावा त्रुटियों को नहीं देख पा लेकिन अब मैं देख:

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

मैं क्या करूँ ??

+0

किसी ने एंड्रॉइड प्रोजेक्ट में क्लॉयर ग्रेडल प्लगइन का उपयोग करने का प्रयास किया है? – SoH

+0

संभावित डुप्लिकेट [एंड्रॉइड स्टूडियो का उपयोग करके कोड कवरेज कैसे प्राप्त करें?] (Http://stackoverflow.com/questions/18683022/how-to-get-code-coverage-using-android-studio) – 030

+2

लिंक किए गए प्रश्न से पूछा गया था मेरे लगभग तीन महीने बाद ... तो हकीकत में यह मेरा संभावित डुप्लिकेट है। – Sababado

उत्तर

7

जैकोको समर्थन एंड्रॉइड ग्रेडल प्लगइन 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' 
    } 
} 

मैं निम्नलिखित http://chrisjenx.com/gradle-robolectric-jacoco-dagger/ द्वारा Robolectric के साथ काम करने JaCoCo कवरेज प्राप्त करने में सक्षम था।

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

बेहतर लिपि देखें https://gist.github.com/ultraon/54cca81ca159ed0a4a9ebf62e89c26ba – ultraon

6

एम्मा समर्थन नए Android निर्माण प्रणाली के भीतर जल्द ही रिहा करने की योजना है: http://tools.android.com/tech-docs/new-build-system/roadmap

अब वहाँ Gradle के माध्यम से android के साथ एम्मा को चलाने के लिए कोई आधिकारिक तरीका है करने के लिए। मुझे लगता है कि उपकरण को आसानी से हासिल किया जा सकता है लेकिन फिर, आप कवरेज के साथ परीक्षण चलाने के लिए एंड्रॉइड को बताने का एक तरीका याद करेंगे। इसके अलावा, डिवाइस से एम्मा रनटाइम कवरेज डेटा खींचने के लिए वर्तमान में कोई रास्ता नहीं है (मेरे ज्ञान का सबसे अच्छा)।

यह प्रोजेक्ट आपकी रूचि रख सकता है: https://github.com/stephanenicolas/Quality-Tools-for-Android। जैसे ही एम्मा इसे एंड्रॉइड ग्रैडल प्लगइन में लाएगा, इसे अपडेट कर दिया जाएगा।

---- अद्यतन

इस प्लगइन के साथ एंड्रॉयड यह जो एंड्रॉयड प्लगइन के साथ असंगत है जावा प्लगइन का उपयोग करता है काम करने के लिए कोई मौका नहीं है।

+0

जबकि [एम्मा प्लगइन फॉर ग्रैडल] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-Emmaplugin) जावा प्लगइन पर निर्भर करता है (और इस प्रकार [एंड्रॉइड प्लगइन के साथ काम नहीं करता] (http: //code.google.com/p/android/issues/detail?id=56232)), [जाकको प्लगइन फॉर ग्रैडल] (http://wiki.gradle.org/display/GRADLE/Plugins#Plugins-GradleJacocoPlugin) ऐसा लगता है कि जावा प्लगइन पर निर्भर नहीं है और * काम * करना चाहिए। – sschuberth

+0

आप ऊपर बताए गए प्रोजेक्ट क्यूएटी पर जैको के साथ ग्रैडल बिल्ड का एक उदाहरण पा सकते हैं। पिछली बार मैंने कोशिश की, एक प्रतिगमन ने जैक के नवीनतम संस्करण को काम करने से रोका लेकिन शायद यह तय हो गया हो। – Snicolas

संबंधित मुद्दे