我有一个基于Gradle的项目构建。 现在我添加了很多单元测试,并尝试将其集成到Jenkins中以在构建项目时运行它们,并生成代码覆盖率报告(这是JaCoCo发挥作用的地方)。
我在build.gradle中有以下配置:
apply plugin: 'java'
apply plugin: 'application'
apply plugin: "jacoco"
buildDir "out"
repositories {
maven {
url "https://internal.corporate.repo.com/"
}
flatDir{
dirs 'resources/lib'
}
}
sourceSets {
main {
java {
srcDir 'src/'
}
resources {
srcDir 'resources/'
}
}
}
jacoco {
toolVersion = "0.7.5.201505241946"
}
dependencies {
compile 'org.apache.ant:ant-launcher:1.9.7'
compile 'org.jdom:jdom:2.0.2'
compile 'joda-time:joda-time:2.9.3'
compile 'com.sun.mail:javax.mail:1.5.5'
compile 'org.json:json:20160212'
compile 'org.apache.wink:wink-client:1.4'
compile 'org.apache.wink:wink-common:1.4'
compile 'org.apache.wink:wink-json-provider:1.4'
compile 'javax.ws.rs:javax.ws.rs-api:2.0.1'
compile 'org.apache.commons:commons-lang3:3.4'
compile 'com.google.code.gson:gson:2.6.2'
compile 'org.apache.ant:ant:1.9.7'
compile 'org.slf4j:slf4j-api:1.7.25'
compile 'org.apache.logging.log4j:log4j-api:2.9.0'
compile 'org.apache.logging.log4j:log4j-core:2.9.0'
compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1'
compile 'javax.activation:activation:1.1.1'
compile 'com.opencsv:opencsv:3.7'
compile 'junit:junit:4+'
compile name:'ant-soatest'
compile name:'ant-junit'
compile 'commons-cli:commons-cli:1.3.1'
compile 'org.apache.ant:ant-junit4:1.9.7'
compile 'commons-io:commons-io:2.5'
compile 'com.oracle.jdbc:ojdbc7:12.1.0.2'
compile 'org.apache.commons:commons-configuration2:2.1.1'
compile 'commons-beanutils:commons-beanutils:1.9.3'
compile 'com.sun.jersey:jersey-client:1.8'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.5'
compile 'jaxen:jaxen:1.1.6'
}
jacocoTestReport {
reports {
xml.enabled true
csv.enabled true
html.destination file("${buildDir}/jacocoHtml")
}
}
test {
jacoco {
excludes = ['**/*.class']
}
testLogging.showStandardStreams = true
}
所以我有两个问题:
test.exec
显示0%的覆盖率,同时将其导入Eclipse中的Coverage选项卡。即使我知道测试已经运行,Gradle测试结果显示了3个成功的测试,这就是我第二次尝试实际获得覆盖结果的原因14:18:03.517 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.internal.concurrent.StoppableExecutorImpl $ 1.run(StoppableExecutorImpl.java:46) 14:18:03.517 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter]引起:: 创建报告时出错
接下来是:
14:18:03.520 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter]引起: java.io.IOException:分析类时出错 /bld/workspace/some/DEV/really/long/obscure/pathname/appname/out/resources/main/testscripts/Cucumber/target/RenamedCommonDependencies.jar@oracle/jdbc/proxy/oracle$1jdbc$1replay$1driver$1NonTxnReplayableArray $ $ 2java $ 1sql $$$ 1Array Proxy.class。
最后接着是:
引起:java.lang.IllegalStateException:无法添加不同的类 同名: 甲骨文/ JDBC /代理/ ORACLE $ 1jdbc $ 1replay $ 1driver $ 1NonTxnReplayableArray $ 2java $ 1sql $ 1Array $$$代理 14:18:03.521 [错误] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:106)
我已经尝试了我能想到的一切,最后看Exclude package from jacoco code coverage for Android
和JaCoCo gradle plugin exclude
我尝试使用/bld/workspace/some/DEV/really/long/obscure/pathname/appname/out/resources/main/testscripts/Cucumber/target/RenamedCommonDependencies.jar
但是同样的错误
请帮助..我浪费99%的开发时间来处理配置,只有1%编写代码...... :(
答案 0 :(得分:0)
我认为任务设置不正确就像是
apply plugin: "application"
apply plugin: "jacoco"
mainClassName = "org.gradle.MyMain"
jacoco {
applyTo run
}
task applicationCodeCoverageReport(type:JacocoReport){
executionData run
sourceSets sourceSets.main
}
在主要课程中,您放置了您的班级名称,导致您不需要所有系统库的代码覆盖率。 你可以在这里看到一个例子: https://github.com/codecov/example-gradle
示例和信息可以在这里找到: https://docs.gradle.org/current/userguide/jacoco_plugin.html#sec:configuring_the_jacoco_plugin
然而, 我认为你赌错了工具...... 查看http://pitest.org/