Gradle:如何使用jacoco为Integration测试生成覆盖率报告

我是新手。 我使用以下代码。 但它会为unit testing用例生成覆盖范围。 但它没有为集成测试用例生成。 我在src / test / java包中有我的测试类。

test { dependsOn jettyRunWar ignoreFailures true finalizedBy jettyStop } apply plugin: 'jacoco' jacocoTestReport { group = "Reporting" description = "Generate Jacoco coverage reports after running tests." additionalSourceDirs = files(sourceSets.main.allJava.srcDirs) } 

看起来,你需要告诉build.gradle是使用sourceSets进行的Intergration测试(即包含那些IT测试的文件夹)。 在我的情况下,我有源src / java(而不是src / main / java – gradle默认)..我的unit testing(Junit)在test / java文件夹下,我的集成测试在src / java-test文件夹下。

 sourceSets { main { java { srcDir 'src/java' } } test { java { srcDir 'test/java' } resources { srcDir 'test/resources' srcDir 'conf' } } integrationTest { java { srcDir 'src/java-test' } } } 

然后,我将IntegrationTest任务作为…你可以调整,因为你可能没有cleanTest(我创建的自定义任务),所以你可以忽略那个依赖…我觉得在你的情况下你会使用像jettyStart这样的东西因为你正在使用它进行IT测试(启动容器以运行IT测试,然后最终确定function以停止jetty .. jetty插件)

 task integrationTest( type: Test, dependsOn: cleanTest ) { jacoco { //destinationFile = file("$buildDir/jacoco/jacocoTest.exec") destinationFile = file("$buildDir/jacoco/integrationTest.exec") //classDumpFile = file("$buildDir/jacoco/classpathdumps") classDumpFile = file("$buildDir/classes/integrationTest") } testClassesDir = sourceSets.integrationTest.output.classesDir classpath = sourceSets.integrationTest.runtimeClasspath } 

请参阅这篇文章,了解我最终的更详细的输出结构和脚本。 我得到unit testing(test.exec)和IT测试intergrationTest.exec的.exec但我没有得到两个测试的jacoco.xml / jacocoHtml报告。 我还发现,如果我运行“gradle clean build”(包括调用“test”任务)和“gradle clean build integrationTest”,那么稍后会覆盖build / test-results文件夹中的unit testing数据和build / reports /测试文件夹。

Jacoco单元和集成测试覆盖范围 – 个人和整体

注意 :在我的情况下,jacocoTestReport在一个常见的gradle文件中的global gradle init.d文件夹中定义。 这将有助于我们不要在所有/项目级build.gradle文件中包含相同的代码。