我正在將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個不同的項目:ProjectA
和ProjectB
。 ProjectB
取決於ProjectA
。
ProjectA
包含一個名爲A
的類。 method1
from A
由ProjectA
中包含的單元測試覆蓋。不包含在ProjectA
中包含的任何測試中。
ProjectB
包含一個名爲B
的類。 來自B
由包含在ProjectB
中的單元測試覆蓋。 method3
在ProjectA
中從類A
調用method2
。
事實:
與Maven與四葉草(官方插件),method2
被認爲覆蓋,因爲它的呼叫從一個單元測試覆蓋的方法(method3
),即使測試是在一個不同的項目。 隨着Gradle和Clover(unofficial plugin),method2
被認爲是未發現的,因爲ProjectA
中沒有專門的測試。
該配置是基本的,Maven和Gradle Clover插件沒有太大區別。
我的問題:
Clover的正常/默認行爲是什麼? 可以通過配置設置此行爲嗎? 或者這是Gradle Clover插件中的某種錯誤?
你綁三葉草?在我看來,[JaCoCo](https://docs.gradle.org/current/userguide/jacoco_plugin.html)優於三葉草,因爲它可以在不使用類文件的情況下即時使用(使用java代理)。它是gradle版本的事實上的標準 –
但動態檢測不適用於Powermock https://github.com/powermock/powermock/wiki/Code-coverage-with-JaCoCo – ToYonos
呵呵...所以切換到[mockito](http://site.mockito.org)那麼...(半開玩笑,一半不!) –