三叶草代码覆盖行为在Maven和Gradle之间有所不同

时间:2017-02-10 10:02:10

标签: java maven gradle code-coverage clover

我正在将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
    }
}

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

ProjectA包含一个名为A的类。来自method1的{​​{1}}由A中包含的单元测试涵盖。 ProjectA中包含的任何测试均未涵盖method2

ProjectA包含一个名为ProjectB的类。来自B的{​​{1}}由method3中包含的单元测试涵盖。 B来自ProjectB中的method3个小组method2。{/ 1}

事实:

使用Maven和Clover(官方插件),A被认为是由单元测试覆盖的方法(ProjectA)调用,即使测试是在不同的项目中。 使用Gradle和Clover(unofficial plugin)时,method2被视为未被发现,因为method3中没有专门的测试。

配置是基本的,Maven和Gradle Clover插件之间没有重大区别。

我的问题:

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

1 个答案:

答案 0 :(得分:2)

既然我们已经获得了乐趣并且排除了JaCoCo,我认为您需要提供带有additional source dirs的三叶草

例如:

apply plugin: 'com.bmuschko.clover'

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