2016-06-25 14 views
7

एंड्रॉइड में जैकोको का उपयोग करने वाले एंड्रॉइड में मेरे रोबोलेक्ट्रिक परीक्षणों पर कोड कवरेज प्राप्त करने का प्रयास करना, लेकिन रिपोर्ट बनाने के दौरान यह मेरे रोबोलेक्ट्रिक परीक्षणों को स्वीकार करने से इंकार कर देता है।एंड्रॉइड - जैकोको कोड कवरेज रोबोलेक्ट्रिक परीक्षणों को अनदेखा करता है

मेरे jacoco.gradle फ़ाइल इस प्रकार है:

apply plugin: 'jacoco' 

jacoco { 
    toolVersion = "0.7.6.201602180812" 
} 

project.afterEvaluate { 

    android.applicationVariants.all { variant -> 
     def name = variant.name 
     def testTaskName = "test${name.capitalize()}UnitTest" 

     tasks.create(name: "${testTaskName}Coverage", type: JacocoReport, dependsOn: "$testTaskName") { 
      group = "Reporting" 
      description = "Generate Jacoco coverage reports for the ${name.capitalize()} build." 

      classDirectories = fileTree(
        dir: "${project.buildDir}/intermediates/classes/${name}", 
        excludes: ['**/R.class', 
           '**/R$*.class', 
           '**/*$ViewInjector*.*', 
           '**/*$ViewBinder*.*', 
           '**/BuildConfig.*', 
           '**/Manifest*.*'] 
      ) 

      sourceDirectories = files(['src/main/java'].plus(android.sourceSets[name].java.srcDirs)) 
      executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec") 

      reports { 
       xml.enabled = true 
       html.enabled = true 
      } 
     } 
    } 
} 
इस सेटअप मैं कवरेज रिपोर्ट प्राप्त कर सकते, लेकिन मैं "src/परीक्षण/जावा" में Robolectric परीक्षण होने के बावजूद 0% कवरेज के साथ

मैं उस फ़ाइल के लिए निम्न कोड में जोड़ देते हैं तो:

Error:No such property: includeNoLocationClasses for class: org.gradle.testing.jacoco.plugins.JacocoTaskExtension_Decorated

मुझे पता है कि मैं करने के लिए Gradle 2.13 की आवश्यकता है:

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

मैं निम्नलिखित त्रुटि मिलती है जब Gradle समन्वयन करने का प्रयास इसका उपयोग नॉनोकोकेशन क्लासेस वैल्यू में शामिल है ताकि गद्दे- wrapper.properties में मेरे पास निम्नलिखित हो:

#Wed Apr 10 15:27:10 PDT 2013 
distributionBase=GRADLE_USER_HOME 
distributionPath=wrapper/dists 
zipStoreBase=GRADLE_USER_HOME 
zipStorePath=wrapper/dists 
distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-2.13-20160228000026+0000-all.zip 

मैं बहुत कुछ मैं Gradle 2.13 चला रहा हूँ एंड्रॉयड प्लगइन संस्करण के साथ 1.5

मेरी क्षुधा में Gradle फ़ाइल मैं निम्नलिखित है हूँ:

//... 

apply from: 'jacoco.gradle' 

//.. 

testOptions { 
    unitTests.returnDefaultValues = true 
} 

//... 

debug { 
    testCoverageEnabled true 
} 

और आदेश मैं कवरेज को चलाने के लिए उपयोग करते हैं:

./gradlew createDebugCoverageReport

तो मुझे आश्चर्य है कि मुझे सही ग्रैडल संस्करण का उपयोग करने के बावजूद शामिल नहीं होना चाहिए नोलोकेशन क्लासेस त्रुटि? और उसके बाहर शायद मैं कुछ गलत कर रहा हूं जहां जैकोको src/test.java में रोबोलेक्ट्रिक परीक्षण नहीं उठा रहा है?

+0

मैं इस कोड है कि देखा उठाई आवरण Gradle को अब पदावनत किया गया है (Gradle-android-प्लगइन 3.x में): एंड्रॉयड { testOptions { unitTests.all { jacoco { includeNoLocationClasses = सच } } } } – Alix

+0

डोनल, एक छोटे से मदद करते हैं। जबकि मैं कॉन्फ़िगर निष्पादित करने का प्रयास कर रहा हूं, मैंने उल्लेख किया है कि मुझे मिल रहा है। ** "त्रुटि: रूट प्रोजेक्ट 'MyProject' प्रकार org.gradle.api.Project के लिए अज्ञात संपत्ति 'एंड्रॉइड' नहीं मिल सका।" ** कोई विचार क्यों !! – CoDe

+0

क्षमा करें @CoDe मुझे याद नहीं है, और जिस कोड के लिए मैं काम कर रहा था उसे ढंक दिया गया है। अगर मुझे याद है तो मैं आपको बता दूंगा। –

उत्तर

6

मैं तुम्हें build.gradle पूरी तरह से नहीं दिख रहा है, लेकिन वह ध्वज के लिए आप में करने के लिए:

  1. उपयोग Gradle2.13+
  2. उपयोग jacoco0.7.6.201602180812

आप ' सुनिश्चित करें कि आप ग्रेड उचित संस्करण का उपयोग करें। इसलिए, मुझे लगता है कि यह मुद्दा केवल गलत जैकोको का उपयोग करने में है।

jacoco {toolVersion = "0.7.6.201602180812"} का उल्लेख ग्रेड डीएसएल को प्रभावित नहीं करता है। इस तरह के बाद

apply from: 'jacoco' 

configuraiton आप jacoco {toolVersion = "..."} अधिक की जरूरत नहीं है: आप नए jacoco प्लगइन जोड़ना चाहिए:

buildscript { 
    repositories { 
     jcenter() 
    } 

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

और आप प्लगइन लागू करना चाहिए, जो आप पहले से ही कर रहे हैं।

नोट: नए एंड्रॉइड ग्रेडल प्लगइन को अपडेट करने पर विचार करें, 2.2.x पहले से ही स्थिर है। jacoco भी नया संस्करण पहले से 0.7.7.201606060606

एक और टिप्पणी है: यदि आप एंड्रॉयड स्टूडियो में मूल समस्या का हल नहीं, जाँच करें कि आप डिफ़ॉल्ट रूप से आवरण का उपयोग करें और जांचें कि आपने 2.13

+0

धन्यवाद, मैं डिफ़ॉल्ट रूप से ग्रैडल 2.13 रैपर का उपयोग नहीं कर रहा था, जो कि जैकोको त्रुटि को हटा रहा था, हालांकि जब मैं परीक्षण कवरेज प्राप्त करने के लिए कमांड चलाता हूं तो जैको अभी भी मेरे रोबोलेक्ट्रिक परीक्षण नहीं उठा रहा है और मौजूदा परीक्षणों के बावजूद 0% कवरेज की रिपोर्ट कर रहा है कक्षाओं के लिए। –

+0

क्या आप इसे '--debug' या '--info' के साथ चला सकते हैं? अगर यह निष्पादन फ़ाइल नहीं मिल पाता है तो यह छोड़ सकता है। तो अपने पथ सावधानी से जांचें –

+0

जब मैं कमांड में --info जोड़ता हूं तो मैं इसे देख रहा हूं - निष्पादन कार्य ': ऐप: कनेक्टेडडिब एंड्रॉइडटेस्ट' (अप-टू-डेट चेक 0.0 सेकेंड ले लिया गया है): कार्य ने कोई आउटपुट घोषित नहीं किया है। कोई परीक्षण नहीं मिला, कुछ भी नहीं करना। लेकिन मुझे लगता है कि "कनेक्टेड" का मतलब है कि यह एंड्रॉइड टेस्ट में इंस्ट्रूमेंटेशन टेस्ट के लिए देख रहा है? मेरे पास अभी तक उनमें से कोई भी नहीं है, केवल ऐप/src/test/java में रोबोलेक्ट्रिक यूनिट परीक्षण, प्रत्येक टेस्ट मेरे टेस्टरुनर के साथ चलाया जाता है जो रोबोइलेक्ट्रिकग्रेडलस्टरनर और @ टेस्ट के साथ एनोटेटेड प्रत्येक टेस्ट को बढ़ाता है - कुछ कारण होना चाहिए जैकोको नहीं उठा रहा है परीक्षण? –

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