java - Gradle के साथ JaCoCo कवरेज रिपोर्ट फ़िल्टर करें




unit-testing code-coverage (4)

धन्यवाद, Yannick Welsch :

Google को खोजने के बाद, ग्रैडल दस्तावेज़ पढ़ने और पुराने स्टैक ओवरफ्लो पोस्ट के माध्यम से जाने के बाद, मुझे यह जवाब आधिकारिक gradle फ़ोरम पर मिला!

jacocoTestReport {
    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it, exclude: 'com/blah/**')
        })
    }
}

स्रोत: https://issues.gradle.org/browse/GRADLE-2955

जावा / ग्रोवी परियोजनाओं के लिए मेरे build.gradle लिए समाधान:

apply plugin: 'java'
apply plugin: 'jacoco'

jacocoTestReport {
    reports {
        xml {
            enabled true // coveralls plugin depends on xml format report
        }

        html {
            enabled true
        }
    }

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                    exclude: ['codeeval/**',
                              'crackingthecode/part3knowledgebased/**',
                              '**/Chapter7ObjectOrientedDesign**',
                              '**/Chapter11Testing**',
                              '**/Chapter12SystemDesignAndMemoryLimits**',
                              'projecteuler/**'])
        })
    }
}

जैसा कि आप देख सकते हैं, मैं कुछ पैकेजों को फ़िल्टर करने के लिए exclude: करने के लिए सफलतापूर्वक अधिक जोड़ने में सक्षम था।

स्रोत: https://github.com/jaredsburrows/CS-Interview-Questions/blob/master/build.gradle

एंड्रॉइड जैसी अन्य परियोजनाओं के लिए कस्टम कार्य:

apply plugin: 'jacoco'

task jacocoReport(type: JacocoReport) {
    reports {
        xml {
            enabled true // coveralls plugin depends on xml format report
        }

        html {
            enabled true
        }
    }

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it,
                    exclude: ['codeeval/**',
                              'crackingthecode/part3knowledgebased/**',
                              '**/Chapter7ObjectOrientedDesign**',
                              '**/Chapter11Testing**',
                              '**/Chapter12SystemDesignAndMemoryLimits**',
                              'projecteuler/**'])
        })
    }
}

स्रोत: https://github.com/jaredsburrows/android-gradle-java-app-template/blob/master/gradle/quality.gradle#L59

मुसीबत:

मेरे पास jacoco साथ एक प्रोजेक्ट है और मैं कुछ वर्गों और / या पैकेजों को फ़िल्टर करने में सक्षम होना चाहता हूं।

संबंधित दस्तावेज़ीकरण:

मैंने निम्नलिखित दस्तावेज पढ़े हैं:

आधिकारिक jacoco साइट: http://www.eclemma.org/jacoco/index.html

jacoco लिए आधिकारिक jacoco दस्तावेज़: https://gradle.org/docs/current/userguide/jacoco_plugin.html

कवरेज पर काम कर रहे आधिकारिक jacoco मुद्दे: https://github.com/jacoco/jacoco/wiki/FilteringOptions https://github.com/jacoco/jacoco/issues/14

संबंधित StackOverflow लिंक:

JaCoCo और Gradle - फ़िल्टरिंग विकल्प (कोई जवाब नहीं)

सोनारुननर और ग्रैडल ( sonar का उपयोग नहीं करते) का उपयोग करके जैकोको रिपोर्ट से संकुल को बाहर निकालें

JaCoCo - रिपोर्ट से जेएसपी को बाहर निकालें (ऐसा लगता है कि यह मैवेन के लिए काम करता है, मैं धीरे-धीरे उपयोग कर रहा हूं)

मेवेन जैकोको कॉन्फ़िगरेशन - रिपोर्ट से कक्षाओं / पैकेजों को बाहर न करें (यह मैवेन के लिए काम करता है, मैं धीरे-धीरे उपयोग कर रहा हूं)

JaCoCo gradle प्लगइन बहिष्कृत (यह काम करने के लिए नहीं मिल सका)

ग्रैडल जैकोको - कवरेज रिपोर्ट में कॉन्फ़िगरेशन में बहिष्कृत कक्षाएं शामिल हैं (बहुत नज़दीकी doFirst , यह doFirst उपयोग की doFirst , मेरे लिए काम नहीं करती)

मैंने जो कोशिश की है उसका उदाहरण:

apply plugin: 'java'
apply plugin: 'jacoco'

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
}

repositories {
    jcenter()
}

jacocoTestReport {
    reports {
        xml {
            enabled true // coveralls plugin depends on xml format report
        }

        html {
            enabled true
        }
    }

    test {
        jacoco {
            destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
            classDumpFile = file("$buildDir/jacoco/classpathdumps")
            excludes = ["projecteuler/**"] // <-- does not work
            // excludes = ["projecteuler"]
        }
    }
}

सवाल:

jacoco कवरेज रिपोर्ट जेनरेट करते समय मैं कुछ पैकेज और कक्षाओं को कैसे बाहर निकाल सकता हूं?


एएनटी में इस समस्या का समाधान Here है। इसे jacocoTestReport कार्य के तहत निम्न जोड़कर jacocoTestReport करने के लिए अनुकूलित किया जा सकता है। यद्यपि यह वास्तव में जैकोको द्वारा दस्तावेज नहीं किया गया है, ऐसा लगता है कि अब परीक्षण परिणामों को फ़िल्टर करने का एकमात्र तरीका है।

afterEvaluate {
    classDirectories = files(classDirectories.files.collect {
        fileTree(dir: it, exclude: 'excluded/files/**')
    })
}

मेरे लिए, यह ठीक काम कर रहा है

test {
  jacoco {
    excludes += ['codeeval/**',
                 'crackingthecode/part3knowledgebased/**',
                 '**/Chapter7ObjectOrientedDesign**',
                 '**/Chapter11Testing**',
                 '**/Chapter12SystemDesignAndMemoryLimits**',
                 'projecteuler/**']
  }
}

जैसा कि दस्तावेज में बताया गया है https://docs.gradle.org/current/userguide/jacoco_plugin.html#N16E62 और अनिवार्य रूप से पूछा गया कि उत्तर है:

इसलिए यदि आप मुझसे पूछें: यह कोई सवाल नहीं है

excludes = ["projecteuler/**"]

या

excludes += ["projecteuler/**"]

परंतु

excludes = ["**/projecteuler/**"]

एक पैकेज *.projecteuler.* को बाहर करने के लिए *.projecteuler.*

और परियोजना स्तर पर test {} , jacocoTestReport में jacocoTestReport


यह थोड़ी देर के लिए बाहर गया है, लेकिन मैं बस इस पर भाग गया। मैं आवश्यक सभी बहिष्कारों के साथ संघर्ष कर रहा था। मैंने पाया कि यह मेरे लिए कुछ और आसान था। यदि आप मेवेन प्रोजेक्ट लेआउट शैली / src / main / java और / src / test / java का पालन करते हैं, तो आपको बस अपनी कक्षा डायरेक्टरीज़ कॉन्फ़िगरेशन में buildDir / classes / मुख्य रखना होगा :

afterEvaluate {
    jacocoTestReport {
        def coverageSourceDirs = ['src/main/java']
        reports {
            xml.enabled false
            csv.enabled false
            html.destination "${buildDir}/reports/jacocoHtml"
        }
        sourceDirectories = files(coverageSourceDirs)
        classDirectories = fileTree(
                dir: "${project.buildDir}/classes/main",
                excludes: [
                      //whatever here like JavaConfig etc. in /src/main/java
                     ]
        )
    }
}