2017-02-10 95 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'' –

相關問題