2017-12-08 41 views
7

मैं Jacaco टेस्ट कवरेज में कुछ स्रोत फ़ाइलों को बाहर निकालना चाहते report.For अन्य उत्पन्न कोड मैं इस तरह किया है jacoco परीक्षण कवरेज से कुछ जावा फ़ाइलें निकालें:का उपयोग कर Gradle

classDirectories = fileTree(
      dir: "${project.buildDir}/intermediates/classes/debug/com", 
      excludes: [ 
        '**/R.class', 
        '**/R$*.class'] 
        ) 

लेकिन जावा फ़ाइलों को छोड़कर के लिए जब मैं इस तरह करने के लिए कोशिश कर रहा हूँ:

dir: "${project.buildDir}/intermediates/classes/debug/com", 
      excludes: [ 
       'src//java/com/example/application/Constants.java'] 

भी इस तरह की कोशिश की है: '**/application/Constants.class' यह काम नहीं करता। क्या मुझे यहां पथ शामिल करने की आवश्यकता है: dir: "${project.buildDir}/intermediates/classes/debug/com"?

मैं एंड्रॉइड स्टूडियो 3.0 का उपयोग कर रहा हूं (मुझे नहीं लगता कि यह यहां मायने रखता है)। पूर्ण कोड मैं कोशिश कर रहा हूँ कि:

task jacocoTestReport(type: JacocoReport) { 
     group = "Reporting" 
     description = "Generate Jacoco coverage reports" 
     reports { 
      xml.enabled = true 
      html.enabled = true 
     } 

sourceDirectories = files(sourceSets) 

classDirectories = fileTree(
      dir: "${project.buildDir}/intermediates/classes/debug/com", 
      excludes: [ 
        'src//java/com/example/application/Constants.java',  //this is not working 
        '**/R.class', 
        '**/R$*.class', 
        '**/BuildConfig.*', 
        '**/Manifest*.*', 
        '**/*$ViewInjector*.*', 
        '**/*$ViewBinder*.*', 
        '**/*$Lambda$*.*', // Jacoco can not handle several "$" in class name. 
        '**/*Module.*', // Modules for Dagger. 
        '**/*Dagger*.*', // Dagger auto-generated code. 
        '**/*MembersInjector*.*', // Dagger auto-generated code. 
        '**/*_Provide*Factory*.*', 
        '**/*_Factory.*', //Dagger auto-generated code 
        '**/*$*$*.*', // Anonymous classes generated by kotlin 
        //add libraries 
        'android/**/*.*', 
        'com/**/*.*', 
        'uk/**/*.*', 
        'io/**/*.*', 
        //remove what we don't test 
        'androidTest/**/*.*', 
        'test/**/*.*', 
        '**/injector/**/*.*', 
        '**/model/**/*.*', 
        '**/mock/**/*.*', 
        '**/event/**/*.*', 
        '**/**_ViewBinding**', 
        '**/*EventType.*', 
        '**/**Mocked' 
      ] 

    ) 
    executionData = fileTree(dir: 'build/jacoco', include: '**/*.exec') 

} 
+0

हाय, आप इस तरह वर्ग फ़ाइल उपयोग करने की कोशिश : '' **/application/Constant.class'', लेकिन आपकी स्रोत फ़ाइल को 'Constants.java' नाम दिया गया है। तो क्या आपने इस टाइपो के बिना भी कोशिश की? जैसे '** **/Constants.class''? – Mayoares

+0

हाँ मैंने टाइपो के बिना – Shubham

उत्तर

2

प्रकार JacocoReport करने के काम का classDirectories के बारे में class फ़ाइलें, नहीं java स्रोत फ़ाइलें है। और मैं सुंदर सुनिश्चित करें कि आपके निर्देशिका

classDirectories = fileTree(
      dir: "${project.buildDir}/intermediates/classes/debug/com", 

class फ़ाइलें हैं और java फ़ाइलें शामिल नहीं करता हूँ। के रूप में भी आप देख सकते हैं अन्य पैटर्न class के बारे में फ़ाइलें हैं:

   '**/R.class', 
       '**/R$*.class', 

और यही कारण है अपने बहिष्कार

  'src//java/com/example/application/Constants.java',  //this is not working 

काम नहीं करता है। तो दिए गए निर्देशिका में मौजूदा class फ़ाइल से मेल खाने के लिए इसे बदलें।

यह भी ध्यान रखें बस इसे मुद्रण से आप आसानी से fileTree(...) कॉल का परिणाम डिबग कर सकते हैं:

tree.each {File file -> 
    println file 
} 
+0

आपके उत्तर के लिए धन्यवाद, मैंने इस तरह की क्लास फ़ाइल का उपयोग करने की भी कोशिश की: '**/application/Constant.class'। ** क्या संदर्भित करता है। मेरी समझ के अनुसार, यह पैकेज के अंदर कुछ भी संदर्भित करता है। यह मेरे लिए काम नहीं करता प्रतीत होता है। – Shubham

+0

@ शुभम मैंने पहले ही समझाया है कि आप 'फ़ाइल ट्री' के परिणाम को कैसे डिबग कर सकते हैं, इसलिए कृपया इसे डीबग करें। और बिना आईएमओ ** [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] (https://stackoverflow.com/help/mcve) ** आप से ** ** पूरी तरह से ** आपकी समस्या का प्रदर्शन करता है, कहने के लिए और कुछ भी नहीं है जो मदद कर सकता है आप, विशेष रूप से इसी तरह की विन्यास दूसरों के लिए ठीक काम करता है। – Godin

3

मेरी परियोजना में, config इस तरह:

//exclude the folders we do not want to check 
jacocoTestReport { 
    afterEvaluate { 
     classDirectories = files(classDirectories.files.collect { 
      fileTree(dir: it, exclude: [ 
        '**/enum/**', 
        '**/util/**', 
      ]) 
     }) 
    } 
} 
+0

क्या हम कई क्लास डायरेक्टरीज़ जोड़ सकते हैं? मैं ऐसा करने में सक्षम नहीं था! – Shubham

+0

@ शुभम ऑफ कारण आप कर सकते हैं, बस कोड में '** **/enum/**' जैसे सूची में पैकेज पथ जोड़ें। –

+0

यदि आप एक उदाहरण दे सकते हैं तो यह बहुत अच्छा होगा। दोनों वर्ग और जावा फाइलों को मध्यवर्ती और स्रोत निर्देशिकाओं से बाहर रखा गया है। – Shubham

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