2017-02-10 32 views
1

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

// 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的类。 method1 from AProjectA中包含的单元测试覆盖。不包含在ProjectA中包含的任何测试中。

ProjectB包含一个名为B的类。 来自B由包含在ProjectB中的单元测试覆盖。 method3ProjectA中从类A调用method2

事实:

与Maven与四叶草(官方插件),method2被认为覆盖,因为它的呼叫从一个单元测试覆盖的方法(method3),即使测试是在一个不同的项目。 随着Gradle和Clover(unofficial plugin),method2被认为是未发现的,因为ProjectA中没有专门的测试。

该配置是基本的,Maven和Gradle Clover插件没有太大区别。

我的问题:

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

+0

你绑三叶草?在我看来,[JaCoCo](https://docs.gradle.org/current/userguide/jacoco_plugin.html)优于三叶草,因为它可以在不使用类文件的情况下即时使用(使用java代理)。它是gradle版本的事实上的标准 –

+0

但动态检测不适用于Powermock https://github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo – ToYonos

+0

呵呵...所以切换到[mockito](http://site.mockito.org)那么...(半开玩笑,一半不!) –

回答

2

现在,我们已经得到了乐趣的方式和排除JaCoCo,我想你会需要提供三叶草additional source dirs

如:

apply plugin: 'com.bmuschko.clover' 

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

有趣的想法。我会测试它并回复你。 – ToYonos

+0

我有一个问题,你的答案,'找不到属性'sourceSets''问题,与这个问题有关我猜想http://stackoverflow.com/questions/15347364/gradle-multiproject-gives-could-not-find -property-sourcesets-on-project-erro无论如何,我对'ProjectA'的路径进行了硬编码(暂时为了测试的缘故)并且它工作正常!我在项目根目录下的clover.xml文件已经填充了适当的覆盖范围。我必须弄清楚这个sourceSets问题,但我的最初问题已修复。谢谢。 – ToYonos

+0

更新了我的答案,其中包括'evaluationDependsOn':someOtherProject'' –

相关问题