Maven 和 Gradle 之间的 Clover 代码覆盖行为不同

Clover code coverage behavior differs between Maven and Gradle

我正在将一个 Maven 项目迁移到 Gradle,我的代码覆盖率插件有问题:Clover。我有一个关于覆盖率计算的无法解释的行为。让我们举个简单的例子:

// ProjectA

class A
{
    void method1()
    {
        // Some stuff
        // This method is covered by a unit test in ProjectA
    }

    void method2()
    {
        // Some stuff
        // This method is not covered by any unit test in ProjectA
    }
}

// ProjectB

class B
{
    void method3()
    {
        new A().method2();
        // Some stuff
        // This method is covered by a unit test in ProjectB
    }
}

我有 2 个不同的项目:ProjectAProjectBProjectB 取决于 ProjectA.

ProjectA 包含一个名为 A 的 class。 A 中的 method1 包含在 ProjectA 中包含的单元测试中。 method2 未包含在 ProjectA.

中的任何测试中

ProjectB 包含一个名为 B 的 class。 B 中的 method3 包含在 ProjectB 中包含的单元测试中。 method3ProjectA.

中从 class A 调用 method2

事实:

使用 Maven 和 Clover(官方插件),method2 被认为是覆盖的,因为它是从单元测试覆盖的方法 (method3) 调用的,即使该测试在不同的项目中. 对于 Gradle 和 Clover (unofficial plugin),method2 被认为是未覆盖的,因为 ProjectA.

中没有专门的测试

配置比较基础,Maven和Gradle Clover插件没有太大区别。

我的问题:

Clover 的正常/默认行为是什么? 可以通过配置设置此行为吗? 或者这是 Gradle Clover 插件中的某种错误?

既然我们已经把乐趣排除在外并排除了 JaCoCo,我认为您需要为三叶草提供 additional source dirs

例如:

apply plugin: 'com.bmuschko.clover'

evaluationDependsOn ':someOtherProject'    
clover {
    additionalSourceDirs = project(':someOtherProject').sourceSets.main.allSource.srcDirs
}