mic*_*del 7 java testing junit gradle jacoco
我有一个build.gradle文件,可以单独或一起成功运行单元和集成测试(使用gradle test integrationTest等命令).两者都使用Junit,我使用的是Gradle 3,这不是Android项目.在不同的目录中为每个成功生成一份报告.我还可以使用gradle test jacoco成功生成Jacoco报告以进行单元测试覆盖.我无法通过使用gradle integrationTest jacoco获取我的其他工作集成测试的覆盖率报告,尽管测试成功运行并生成了integrationTest.exec文件.
为了更明确,我在build/reports/index.html中获得了单元测试覆盖率报告,在build/reports/test/index.html和build/reports/integrationTest/index.html中获得了Junit报告.创建了build/reports/jacoco目录,但只包含一个空的"test"目录.build /还包含一个jacoco /目录,其中包含.exec文件和classpathdumps.
这是我的缩写build.gradle
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'jacoco'
repositories {
mavenCentral()
}
sourceSets {
main {
java {
srcDirs = ['src/java']
}
test {
java {
srcDirs = ['test/java']
}
}
resources {
srcDirs = ['src/java', 'conf', 'resource']
}
}
integrationTest {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('integration_test/java')
}
}
}
test {
jacoco {
append = false
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
}
}
configurations {
integrationTestCompile.extendsFrom testCompile
integrationTestRuntime.extendsFrom testRuntime
}
/* SNIP */
task integrationTest(type: Test) {
dependsOn startserver
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
}
integrationTest.finalizedBy stopserver
check.dependsOn integrationTest
integrationTest.mustRunAfter test
tasks.withType(Test) {
reports.html.destination = file("${reporting.baseDir}/${name}")
}
jacoco {
toolVersion = "0.7.6.201602180812"
}
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination "$buildDir/reports"
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了关于合并两个报告的现有问题,生成了我已经拥有的Junit集成测试报告,以及关于Maven和Ant的类似但最终无益的问题.我发现的最接近的是这个,但我尝试过的任何东西都是富有成效的.似乎确实存在类似的问题,但是他们的build.gradle较少,唯一的回复是前一个链接中问题的作者的0-up-vote,not-accepted响应.
由于这已经很长了,我不想过度提供甚至超过这里,但我很乐意提供更多,如果有什么不清楚.
我已经证实没有像单元测试结果覆盖集成测试那样愚蠢 - 运行集成测试和jacoco没有定期测试甚至不会产生类似的文件.
我可以做些什么来获得集成测试覆盖率?
[第一次编辑]我已经创建了一个小的Github仓库,它拥有重现这个问题所需的一切:https://github.com/micseydel-tile/gradle-jacoco-integration-test
小智 1
您可以将两个测试任务写入同一目标文件,并将它们附加到现有文件(如果有)。这样您就可以运行任一测试任务并在 HTML 报告中单独查看覆盖率。此代码片段来自您的小型 github 存储库
`task integrationTest(type: Test) {jacoco {
append = true
destinationFile = file("$buildDir/jacoco/jacocoTest.exec")
classDumpFile = file("$buildDir/jacoco/classpathdumps")
}
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath}`
Run Code Online (Sandbox Code Playgroud)
您只需添加 jacoco 代码块并打开附加即可。
| 归档时间: |
|
| 查看次数: |
2353 次 |
| 最近记录: |