CorDapp JaCoCo 代码覆盖率
CorDapp JaCoCo Code Coverage
我有一个基于 Corda 的项目和几个 CorDapp 子项目。我一直在寻找将 JaCoCo 代码覆盖添加到该项目的方法。我希望在所有子项目 JaCoCo 报告的汇总报告中绘制一个代码覆盖率报告。
为了将 JaCoCo 添加到具有多个 maven 子项目的 maven 项目中,我遵循了这篇博客文章 https://lkrnac.net/blog/2016/10/aggregate-test-coverage-report/。在我们 运行 构建 ./gradlew clean test
并收到我们的报告后,我们的一名团队成员注意到当我们 运行 ./gradlew clean deployNodes
.
我已经回到这里 https://github.com/corda/cordapp-template-kotlin 找到的基本 Kotlin CorDapp 模板,以排除我们的项目是否做错了什么 structure/gradle。在没有添加 JaCoCo 的情况下,我看到了我期望的所有白名单条目。添加 JaCoCo 代码后,我只会看到 5 个默认的 Corda 白名单条目,以及 none 我添加的合约条目。
我使用的是 JaCoCo 版本 0.8.1
和工作服版本 2.6.3
。我所做的更改都在根目录 cordapp-template-kotlin
:
的 build.gradle 文件中
subprojects {
repositories {
mavenCentral()
}
apply plugin: 'jacoco'
apply plugin: 'java'
group = 'net.lkrnac.blog'
version = '1.0-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
dependencies {
testCompile("junit:junit:4.12")
}
jacoco {
toolVersion = jacoco_version
}
//command for generating subproject coverage reports
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination file("${buildDir}/jacocoHtml")
}
}
}
def publishedProjects = subprojects.findAll()
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
description = 'Generates an aggregate report from all subprojects'
dependsOn(publishedProjects.test)
additionalSourceDirs = files(publishedProjects.sourceSets.main.allSource.srcDirs)
sourceDirectories = files(publishedProjects.sourceSets.main.allSource.srcDirs)
classDirectories = files(publishedProjects.sourceSets.main.output)
executionData = files(publishedProjects.jacocoTestReport.executionData)
doFirst {
executionData = files(executionData.findAll { it.exists() })
}
reports {
html.enabled = true // human readable
xml.enabled = true // required by coveralls
}
}
coveralls {
sourceDirs = publishedProjects.sourceSets.main.allSource.srcDirs.flatten()
jacocoReportPath = "${buildDir}/reports/jacoco/jacocoRootReport/jacocoRootReport.xml"
}
tasks.coveralls {
dependsOn jacocoRootReport
}
我认为问题出在简单地添加一个将 JacocoReport 作为参数的任务。我有什么想法可以继续进行代码覆盖,同时正确构建我的白名单吗?
我已找到解决 coverage/whitelisting 问题的方法。我开始剥离子项目规范中似乎不必要的代码,并发现删除除 apply plugin:
、jacoco
和 jacocoTestReport
命令之外的所有内容都产生了根 Jacoco 代码覆盖率,以及具有必要的白名单。我不需要更改上面的任何其他代码来使白名单工作。
作为参考,子项目现在看起来像这样:
subprojects {
apply plugin: 'jacoco'
apply plugin: 'kotlin'
jacoco {
toolVersion = jacoco_version
}
//command for generating subproject coverage reports
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination file("${buildDir}/jacocoHtml")
}
}
}
我有一个基于 Corda 的项目和几个 CorDapp 子项目。我一直在寻找将 JaCoCo 代码覆盖添加到该项目的方法。我希望在所有子项目 JaCoCo 报告的汇总报告中绘制一个代码覆盖率报告。
为了将 JaCoCo 添加到具有多个 maven 子项目的 maven 项目中,我遵循了这篇博客文章 https://lkrnac.net/blog/2016/10/aggregate-test-coverage-report/。在我们 运行 构建 ./gradlew clean test
并收到我们的报告后,我们的一名团队成员注意到当我们 运行 ./gradlew clean deployNodes
.
我已经回到这里 https://github.com/corda/cordapp-template-kotlin 找到的基本 Kotlin CorDapp 模板,以排除我们的项目是否做错了什么 structure/gradle。在没有添加 JaCoCo 的情况下,我看到了我期望的所有白名单条目。添加 JaCoCo 代码后,我只会看到 5 个默认的 Corda 白名单条目,以及 none 我添加的合约条目。
我使用的是 JaCoCo 版本 0.8.1
和工作服版本 2.6.3
。我所做的更改都在根目录 cordapp-template-kotlin
:
subprojects {
repositories {
mavenCentral()
}
apply plugin: 'jacoco'
apply plugin: 'java'
group = 'net.lkrnac.blog'
version = '1.0-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
dependencies {
testCompile("junit:junit:4.12")
}
jacoco {
toolVersion = jacoco_version
}
//command for generating subproject coverage reports
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination file("${buildDir}/jacocoHtml")
}
}
}
def publishedProjects = subprojects.findAll()
task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
description = 'Generates an aggregate report from all subprojects'
dependsOn(publishedProjects.test)
additionalSourceDirs = files(publishedProjects.sourceSets.main.allSource.srcDirs)
sourceDirectories = files(publishedProjects.sourceSets.main.allSource.srcDirs)
classDirectories = files(publishedProjects.sourceSets.main.output)
executionData = files(publishedProjects.jacocoTestReport.executionData)
doFirst {
executionData = files(executionData.findAll { it.exists() })
}
reports {
html.enabled = true // human readable
xml.enabled = true // required by coveralls
}
}
coveralls {
sourceDirs = publishedProjects.sourceSets.main.allSource.srcDirs.flatten()
jacocoReportPath = "${buildDir}/reports/jacoco/jacocoRootReport/jacocoRootReport.xml"
}
tasks.coveralls {
dependsOn jacocoRootReport
}
我认为问题出在简单地添加一个将 JacocoReport 作为参数的任务。我有什么想法可以继续进行代码覆盖,同时正确构建我的白名单吗?
我已找到解决 coverage/whitelisting 问题的方法。我开始剥离子项目规范中似乎不必要的代码,并发现删除除 apply plugin:
、jacoco
和 jacocoTestReport
命令之外的所有内容都产生了根 Jacoco 代码覆盖率,以及具有必要的白名单。我不需要更改上面的任何其他代码来使白名单工作。
作为参考,子项目现在看起来像这样:
subprojects {
apply plugin: 'jacoco'
apply plugin: 'kotlin'
jacoco {
toolVersion = jacoco_version
}
//command for generating subproject coverage reports
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination file("${buildDir}/jacocoHtml")
}
}
}