gpt4 book ai didi

gradle - Gradle Powermock代码覆盖丢失

转载 作者:行者123 更新时间:2023-12-03 03:40:03 27 4
gpt4 key购买 nike

当我在测试中使用powermock时,如何配置gradle以产生声纳的代码覆盖率?我发现雅各布不支持这一点。还有其他可以与powermock一起使用的codecoverage插件吗?

最佳答案

Jacoco Offline Instrumentation是解决此问题的方法。

查看我的gradle构建文件

Build and run tests:
Linux:
\$ ./gradlew
Windows:
\$ gradlew
------------------------------------------
"""

apply plugin: 'java'
apply plugin: 'org.sonarqube'
apply plugin: 'jacoco'

// Project group and version
group 'com.abcd.jacocoTest'
version '1.0.0'

// JDK version source compatibility
sourceCompatibility = 1.8

// JDK version target compatibility
targetCompatibility = 1.8

configurations {
jacocoAnt
jacocoRuntime
}

task wrapper(type: Wrapper) {
gradleVersion = "4.5.1"
}

defaultTasks 'clean', 'test'

buildscript {
repositories {
maven { url "https://plugins.gradle.org/m2/" }
}

dependencies {
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2"
}
}

repositories {
mavenCentral()
}

dependencies {

jacocoAnt group: 'org.jacoco', name: 'org.jacoco.ant', version: '0.8.1'
jacocoAgent group: 'org.jacoco', name: 'org.jacoco.agent', version: '0.8.1'
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.8.9'
testCompile group: 'org.powermock', name: 'powermock-module-junit4', version: '1.7.4'
testCompile group: 'org.powermock', name: 'powermock-api-mockito2', version: '1.7.4'
testCompile group: 'org.powermock', name: 'powermock-api-easymock', version: '1.7.4'

}

test {
testLogging {
afterSuite { desc, result ->
if (!desc.parent) { // will match the outermost suite
println "Unit Tests: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} successes, ${result.failedTestCount} failures, ${result.skippedTestCount} skipped)"
}
}
}

jacoco {
append = "false"
destinationFile = file("$buildDir/reports/jacoco/jacoco-sonar/jacoco-coverage.exec")
}
}

jacoco {
toolVersion = "0.8.0"
}

jacocoTestReport {
reports {
html.destination file("${buildDir}/reports/jacoco/jacocoHtml")
}
}

sonarqube {
properties {
property "sonar.projectName", 'JacocoTest'
property "sonar.host.url", "http://localhost:9000"
property "sonar.java.binaries", "${buildDir}/classes"
property "sonar.java.libraries", "**/*.jar"
property "sonar.dynamicAnalysis", "reuseReports"
property "sonar.jacoco.reportPaths", "${buildDir}/reports/jacoco/jacoco-sonar/jacoco-coverage.exec"
}
}

task instrument(dependsOn: ['classes']) {
ext.outputDir = buildDir.path + '/reports/classes-instrumented'
doLast {
ant.taskdef(name: 'instrument',
classname: 'org.jacoco.ant.InstrumentTask',
classpath: configurations.jacocoAnt.asPath)
ant.instrument(destdir: outputDir) {
fileset(dir: sourceSets.main.output.classesDir)
}
}
}
gradle.taskGraph.whenReady { graph ->
if (graph.hasTask(instrument)) {
tasks.withType(Test) {
doFirst {
classpath = files(instrument.outputDir) + classpath + configurations.jacocoRuntime
}
}
}
}
task report(dependsOn: ['instrument', 'test']) {
doLast {
ant.taskdef(name: 'report',
classname: 'org.jacoco.ant.ReportTask',
classpath: configurations.jacocoAnt.asPath)
ant.report() {
executiondata {
ant.file(file: buildDir.path + '/reports/jacoco/jacoco-sonar/jacoco-coverage.exec')
}
structure(name: 'Example') {
classfiles {
fileset(dir: sourceSets.main.output.classesDir)
}
sourcefiles {
fileset(dir: 'src/main/java')
}
}
html(destdir: buildDir.path + '/reports/jacoco')
}
}
}

在这里 报告任务将创建项目的脱机检测文件。

最后,执行 声纳任务
然后您可以看到还包括了powermocked类的内容。
Execution command ./gradlew report sonarqube

然后去看看你的声纳主机(本地主机:9000)。

关于gradle - Gradle Powermock代码覆盖丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45959891/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com