在多项目构建中为多个Gradle项目贡献scoverage代码覆盖率



我正在使用Gradle -scoverage与多项目Gradle构建。我想利用这样一个事实:项目b的测试在项目a中执行代码。但是gradle-scoverage 7.0.0并没有在:projectB的覆盖率报告中显示:projectA中相关行的任何代码覆盖率,并且:projectA的覆盖率报告只是针对那个项目的。

我在GitHub问题跟踪器中找到了一个建议的解决方案:

project(':projectA').tasks.reportScoverage.dependsOn(project(':projectB').tasks.reportScoverage)

,但它没有工作。第一个问题是在执行顶级项目的构建时还没有创建任务。因为gradle-scoverage插件应用于每个gradle项目的构建。Gradle文件。

所以我试着把那行移动到项目b的构建中。Gradle文件,并将其改为:

project(':projectA').tasks.reportScoverage.dependsOn(tasks.reportScoverage)

但是依赖关系不起作用,因为当reportScoverage任务以期望的顺序执行时,reportTestScoverage任务以相反的顺序执行。所以我改成:

project(':projectA').tasks.reportTestScoverage.dependsOn(tasks.reportTestScoverage)

但是Gradle又抱怨找不到reportTestScoverage任务。

因此,按照这里的建议,我重新构建了它:

项目(":projectA").tasks.reportTestScoverage.dependsOn (projectB: reportTestScoverage)

但是,尽管现在项目b的reportTestScoverage任务首先运行,仍然没有显示项目a中相关行的代码覆盖率。我已经通过在IntelliJ调试器的projectB中运行相关测试验证了这行是否被击中。

然后我意识到我忘了加上:

scoverage project(path: ':projectA', configuration: 'scoverage')

到projectB的依赖项,如GitHub问题注释中提到的。但是加上这个也没有什么区别。

每次尝试后我都运行gradlew clean build

我不能使用IntelliJ调试scoverage的字节码增强,但是通过使用jdbc,我可以看到,当运行项目b的测试时,相关行显示没有覆盖的类没有被scoverage检测。

通过使用Gradle的--debug选项,我能够看到scoverage编译任务在测试执行之前没有被运行。

所以,除了上面的修改,我还需要修改:

scoverage project(path: ':projectA', configuration: 'scoverage')

:

scoverage project(':projectA').sourceSets.scoverage.output

最新更新